如何处理大量图片。哪些缩略图应该在Android应用程序中显示?

时间:2012-10-06 11:22:54

标签: android

我的Android应用程序有问题。 我使用一个应用程序,用手机/平板电脑的相机构建图片。由于相机的高分辨率,这些图片有时非常大。

现在我加载应用程序并创建一个listView,其中图片的小缩略图在左侧,右侧是一些文本。

我用这种方式创建图片:

Bitmap a = BitmapFactory.decodeFile(url);
int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 
         (float) 66.0, context.getResources().getDisplayMetrics());
int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 
         (float) 48.0, context.getResources().getDisplayMetrics());
Bitmap b = Bitmap.createScaledBitmap(a, width, height, false);

问题是这个步骤需要相当长的时间。

有没有办法让它更快?

2 个答案:

答案 0 :(得分:0)

没有办法让它更快,但你不应该阻止UI线程。参见

  1. AsyncTask(以及许多相关问题,如Using AsyncTask to load Images in ListView
  2. LruCache

答案 1 :(得分:0)

这是我从这里采用的解决方案:https://stackoverflow.com/a/5934983/1369222

效果很好!

byte[] imageData = null;

        try     
        {

            final int THUMBNAIL_SIZE = 64;

            FileInputStream fis = new FileInputStream(fileName);
            Bitmap imageBitmap = BitmapFactory.decodeStream(fis);

            imageBitmap = Bitmap.createScaledBitmap(imageBitmap, THUMBNAIL_SIZE, THUMBNAIL_SIZE, false);

            ByteArrayOutputStream baos = new ByteArrayOutputStream();  
            imageBitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
            imageData = baos.toByteArray();

        }
        catch(Exception ex) {

        }

确保在异步或单独的线程任务中执行此操作,这样就不会阻止UI线程!