0

我正在尝试制作一个拍摄视频然后在网格视图中显示视频的应用程序。我已经到了所有视频缩略图都像应有的那样显示在网格视图中的地步。但是,我的问题是我使用的方法有很多滞后时间。加载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;
}

谢谢你的帮助

4

1 回答 1

1

2件事:

使用 ViewHolder 缓存所有内容,如下所述:使 ListView 滚动平滑(也适用于 GridViews)

此外,使用 ImageLoader 动态加载图像。有很多可用的,或者您可以构建自己的。这里有一些:

所有这些加载器都使用位图缓存,如下所述:缓存位图

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

于 2013-05-31T14:05:14.647 回答