使用位图缩略图的问题

时间:2013-05-31 13:52:01

标签: android performance android-layout user-interface thumbnails

我正在尝试创建一个采用视频的应用,然后在gridview中显示视频。我已经达到了所有视频缩略图都在网格视图中显示的程度。但是,我的问题是我使用的方法有很多滞后时间。加载gridview需要一些时间,当我尝试滚动时,总会出现某种滞后现象。这很可能是因为我正在为每个视频缩略图使用位图。

我想知道我能做些什么才能让它更快更顺畅。我的代码发布在下面。

class VideoAdapter extends BaseAdapter {
Context context; 
ArrayList<String> videopathlist;
Bitmap bmthumb;


VideoAdapter(Context c, ArrayList<String> filepathlist){
    context = c;
    videopathlist = new ArrayList<String>();
    this.videopathlist.addAll(filepathlist);
    Log.i(TAG, "" + videopathlist);
}

@Override 
public int getCount() {
    return videopathlist.size();
}

@Override
public Object getItem(int position) {
    return videopathlist.get(position);
}

@Override
public long getItemId(int arg0) {
    return 0;
}

@Override
public View getView(int posiiton, View arg1, ViewGroup arg2) {
    ImageView imageview = new ImageView(context);
     bmthumb = ThumbnailUtils.createVideoThumbnail(videopathlist.get(posiiton), MediaStore.Video.Thumbnails.MINI_KIND);
     if (bmthumb != null) {
         Log.i(TAG1, "There is a thumbnail");
         imageview.setImageBitmap(bmthumb);
     } else {
         Log.i(TAG1, "There is NOT a thumbnail");
     }
     imageview.setScaleType(ImageView.ScaleType.CENTER_CROP);
     imageview.setLayoutParams(new GridView.LayoutParams(160, 160));


    return imageview;
}

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

2件事:

使用ViewHolder缓存所有内容,如下所述:Making ListView Scrolling Smooth(也适用于GridViews)

另外,使用ImageLoader动态加载图像。有很多可用或你可以建立自己的。以下是一些:

所有这些加载器都使用了这里描述的位图缓存:Caching Bitmaps

此外,您可能在返回视图时实际创建缩略图位图。这让我感到非常昂贵。我会这样做是一个单独的步骤,与显示它们无关。例如,在首次创建活动时启动AsyncTask以生成任何新缩略图。然后在您的适配器中查询MediaStore以获取生成的缩略图。