我正在尝试创建一个采用视频的应用,然后在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;
}
感谢您的帮助
答案 0 :(得分:1)
2件事:
使用ViewHolder缓存所有内容,如下所述:Making ListView Scrolling Smooth(也适用于GridViews)
另外,使用ImageLoader动态加载图像。有很多可用或你可以建立自己的。以下是一些:
所有这些加载器都使用了这里描述的位图缓存:Caching Bitmaps
此外,您可能在返回视图时实际创建缩略图位图。这让我感到非常昂贵。我会这样做是一个单独的步骤,与显示它们无关。例如,在首次创建活动时启动AsyncTask
以生成任何新缩略图。然后在您的适配器中查询MediaStore
以获取生成的缩略图。