Problems using bitmaps for thumbnails

倾然丶 夕夏残阳落幕 提交于 2019-12-13 02:51:52

问题


I'm trying to make an app that takes videos and then displays the videos in a gridview. I have gotten to the point where all the video thumbnails are showing up in the gridview like they should. However, my problem is that the method I am using has a lot of lag time. It takes some time to get the gridview loaded and when I try to scroll there is always some sort of lag. This is most likely due to the fact that I'm using bit maps for every video thumbnail.

I was wondering what I could do to make this a lot quicker and smoother. My code is posted below.

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;
}

Thanks for your help


回答1:


2 things:

Use a ViewHolder to cache everything, as described here: Making ListView Scrolling Smooth (applies to GridViews too)

Also, use an ImageLoader to load images dynamically. There are many available or you can build your own. Here are some:

  • Volley
  • Android-Universal-Image-Loader
  • ImageLoader

All these loaders make use of Bitmap caches as described here: Caching Bitmaps

Also, you could potentially be actually creating the thumbnail bitmaps when returning the view. This strikes me as very expensive. I would do this as a seperate step, unrelated to displaying them. For example, kick off an AsyncTask when your activity is first created to generate any new thumbnails. Then in your adapter just query the MediaStore to get the generated thumbnails.



来源:https://stackoverflow.com/questions/16858925/problems-using-bitmaps-for-thumbnails

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!