打开图像对话框/ GridView非常慢

时间:2012-10-08 21:45:03

标签: android gridview

我有什么

我在活动中有一个“打开图像对话框”。此“对话框”仅显示文件夹和兼容图像。为此,我有一个带有gridview的图层,我填充了包含图像和文本的行。

文本用于文件名称,图像用于预览图像。

我的问题

如果我看到的文件夹没有大量图像,则对话框效果很好。我正在研究SII,当我尝试打开相机相册(8Mpx的照片)时,我的代码变得很慢,即使每次重新绘制新行也是如此。

我的代码

我认为主要问题在于预览图像的创建,因为如果删除这部分,一切正常。对于图像,我有:

  @Override
public View getView(int position, View convertView, ViewGroup parent) {
   View grid;

   if(convertView==null){
       grid = new View(mContext);
       LayoutInflater inflater=getLayoutInflater();
       grid=inflater.inflate(R.layout.row, parent, false);
   }else{
       grid = (View)convertView;
   }

   ImageView icon = (ImageView)grid.findViewById(R.id.file_image);
   TextView label = (TextView)grid.findViewById(R.id.file_text);
   label.setText(item.get(position));
    if (item.get(position).equals("/")){
        icon.setImageResource(R.drawable.folderupup);
    }else if (item.get(position).endsWith("../")) {
        icon.setImageResource(R.drawable.folderup);
    }else if (item.get(position).endsWith("/")) {    
        icon.setImageResource(R.drawable.folder);
    }else{
        Bitmap b = BitmapFactory.decodeFile(path.get(position));
        Bitmap b2 = Bitmap.createScaledBitmap(b, 55, 55, false);
        icon.setImageBitmap(b2);
    }

   return grid;
  }
 }

2 个答案:

答案 0 :(得分:0)

在某个地方,代码会调用它(数据是图像的完整路径名):

DiskLruCache.Editor editor = mHttpDiskCache.edit(key);
if (editor != null) {
       if (downloadUrlToStream(data,editor.newOutputStream(DISK_CACHE_INDEX))) {
             editor.commit();
       } else {
             editor.abort();
       }
}

因为我不知道如何改变它,所以我现在修改了url受体,而不是从网上读取它从文件中读取的内容:

    public boolean downloadUrlToStream(String urlString, OutputStream outputStream) {
        disableConnectionReuseIfNecessary();
        HttpURLConnection urlConnection = null;
        BufferedOutputStream out = null;
        BufferedInputStream in = null;

        try {

            in = new BufferedInputStream(new FileInputStream(new File(urlString)), IO_BUFFER_SIZE);
            out = new BufferedOutputStream(outputStream, IO_BUFFER_SIZE);

            int b;
            while ((b = in.read()) != -1) {
                out.write(b);
            }
            return true;
        } catch (final IOException e) {
            Log.e(TAG, "Error in downloadBitmap - " + e);
        } finally {
            if (urlConnection != null) {
                urlConnection.disconnect();
            }
            try {
                if (out != null) {
                    out.close();
                }
                if (in != null) {
                    in.close();
                }
            } catch (final IOException e) {}
        }
        return false;
    }

但是gridview加载图像的速度非常慢。我认为这是因为最后一种方法。我怎样才能做得更好?

答案 1 :(得分:0)

最后,我做了所有Android页面所说的内容而没有为缓存做任何事情。现在列表加载速度很快。也许我可以添加一个内存缓存,因为文辉指出,但它是如此之快,以至于我的目的无关紧要。

测试已在SII上完成,文件夹包含大约400个8Mpx

的文件夹