0

是)我有的

我在活动中有一个“打开图像对话框”。此“对话框”仅显示文件夹和兼容图像。为此,我有一个带有 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;
  }
 }
4

2 回答 2

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加载图像的速度非常慢。我认为这是因为最后一种方法。我怎样才能做得更好?

于 2012-10-10T23:40:30.177 回答
0

最后,我完成了 Android 页面所说的所有操作,而没有为缓存做任何事情。现在列表加载速度很快。也许我可以像文辉指出的那样添加一个内存缓存,但它太快了,对我的目的来说并不重要。

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

于 2012-10-18T12:42:26.153 回答