ListView中的位图:缓慢加载

时间:2013-05-14 10:45:14

标签: android image bitmap loading

在我的ListView中,每行都有一个ImageView和两个TextView。 ListView的图片是从我的Galaxy Nexus的内存中加载的。我已经使用

将其缩小到100x100
Bitmap scaled = Bitmap.createScaledBitmap(de, 80, 80, true);

但仍需要几秒钟才能加载。

我该怎么办?

编辑:

public Bitmap resizeBitmap(String path){
    BitmapFactory.Options options = new BitmapFactory.Options();
    InputStream is = null;
    try {
        is = new FileInputStream(path);
    } catch (FileNotFoundException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    BitmapFactory.decodeStream(is,null,options);
    try {
        is.close();
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    try {
        is = new FileInputStream(path);
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    // here w and h are the desired width and height
    options.inSampleSize = Math.max(options.outWidth/100, options.outHeight/100);
    // bitmap is the resized bitmap
    Bitmap bitmap = BitmapFactory.decodeStream(is,null,options);
    return bitmap;
}

3 个答案:

答案 0 :(得分:1)

第一点我可以从你的代码中看到你正在解码流两次......它被解码的第一个地方甚至没有在任何地方使用....所以删除该语句将提高代码的执行速度

 //BitmapFactory.decodeStream(is,null,options); comment this line
try {
    is.close();
} catch (IOException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}

我也可以问你为什么不能使用图片的缩略图?而不是调整每个图像的大小....如果您试图在您的应用程序中显示图像的缩略图

是的,有一整张表存储了您需要通过Cursor api访问它的图像的拇指按钮,例如:

    Cursor mediaCursor = managedQuery(
            MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null,
            null, null);

从此光标您可以获取imageId,然后在图像ID的帮助下,您可以使用MediaStore.Images.Thumbnails.getThumbnail()方法检索图像的缩略图,例如,下面是一些有用的代码:

     Bitmap thumbBitmap = null;

    thumbBitmap = MediaStore.Images.Thumbnails.getThumbnail(cr, imageID, MediaStore.Images.Thumbnails.MICRO_KIND, null);
    if(thumbBitmap != null){
        return new BitmapDrawable(thumbBitmap);
    }

答案 1 :(得分:0)

有效地在ListView中显示位图是一项相当复杂的任务,涉及很多变量。我建议你阅读this并下载他们提供的代码示例。这是一个很好的起点,在简单的情况下可能足以复制粘贴。

答案 2 :(得分:0)

最好的方法是在AsyncTask中加载它们。在这里,您有一个很棒的视频,显示了这种方法: https://developers.google.com/events/io/2012/sessions/gooio2012/103/