【问题标题】:Getting thumbnail from video url and loading on gridview very slow从视频网址获取缩略图并在gridview上加载非常慢
【发布时间】:2014-08-13 11:54:40
【问题描述】:

我正在从 sdcard 获取视频 url 列表并传递给适配器。在适配器中,从视频的 url 创建缩略图位图。加载 gridview 变得非常慢,滚动也非常慢。有什么方法可以更快更轻松地从 sd 卡中获取缩略图。

@Override
    public View getView(int position, View convertView, ViewGroup parent) {

        final ViewHolder holder;
        if (convertView == null) {

            convertView = infalter.inflate(R.layout.gallery_item, null);
            holder = new ViewHolder();
            holder.imgQueue = (ImageView) convertView.findViewById(R.id.imgQueue);

            holder.imgQueueMultiSelected = (ImageView) convertView
                    .findViewById(R.id.imgQueueMultiSelected);

            convertView.setTag(holder);

        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.imgQueue.setTag(position);

        try {

            Bitmap bitmap=ThumbnailUtils.createVideoThumbnail(data.get(position).sdcardPaththumbvideo, MediaStore.Video.Thumbnails.MINI_KIND);

            if (bitmap==null) {
                holder.imgQueue.setImageResource(R.drawable.no_media);
            }
            else{
                holder.imgQueue.setImageBitmap(bitmap);
            }



        } catch (Exception e) {
            e.printStackTrace();
        }

        return convertView;
    }

【问题讨论】:

    标签: android gridview video adapter thumbnails


    【解决方案1】:

    ThumbnailUtils.createVideoThumbnail() 移出主应用程序线程。在this sample project 中,我使用the SmartImageView library 异步加载缩略图,将我的自定义VideoThumbnailImage 作为ViewBinder 应用到我的SimpleCursorAdapter 上,显示查找所有视频的结果:

      private static class ThumbnailBinder implements
          SimpleCursorAdapter.ViewBinder {
        @Override
        public boolean setViewValue(View v, Cursor c, int column) {
          if (column == c.getColumnIndex(MediaStore.Video.Media._ID)) {
            VideoThumbnailImage thumb=
                new VideoThumbnailImage(
                                        c.getInt(column),
                                        MediaStore.Video.Thumbnails.MICRO_KIND);
    
            ((SmartImageView)v).setImage(thumb,
                                         R.drawable.ic_media_video_poster);
    
            return(true);
          }
    
          return(false);
        }
      }
    
      private static class VideoThumbnailImage implements SmartImage {
        private int videoId;
        private int thumbnailKind;
    
        VideoThumbnailImage(int videoId, int thumbnailKind) {
          this.videoId=videoId;
          this.thumbnailKind=thumbnailKind;
        }
    
        @Override
        public Bitmap getBitmap(Context ctxt) {
          return(MediaStore.Video.Thumbnails.getThumbnail(ctxt.getContentResolver(),
                                                          videoId,
                                                          thumbnailKind,
                                                          null));
        }
      }
    

    【讨论】:

    • 谢谢 CW,让我试试这个
    • 经过努力,我可以维护视频缩略图的缓存。非常感谢 CW 并感谢您提供 SmartImageView。它真的很棒
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 2015-07-25
    • 1970-01-01
    • 2014-11-20
    • 2018-06-14
    • 2012-12-06
    • 2017-02-16
    相关资源
    最近更新 更多