【问题标题】:How to create thumbnails for videos from sd card.?如何为 SD 卡中的视频创建缩略图。?
【发布时间】:2016-01-27 07:01:47
【问题描述】:

我是 android 开发新手,我正在列出存储(我的手机)中的所有视频,并希望在自定义 ListView 中创建缩略图显示。 我的问题是创建缩略图需要时间,如何解决?请帮帮我。

下面的代码是创建缩略图

@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.video_list);

    ListView videolist=(ListView)findViewById(R.id.video_list);
    ArrayList<String> videoName = new ArrayList<>();
    final ArrayList<String> videoPath = new ArrayList<>();
    ArrayList<Bitmap> videoThumbnail = new ArrayList<>();

    String selection =MediaStore.Video.Media._ID;
    String[] columns = { MediaStore.Video.Media.DATA,MediaStore.Video.Media.DISPLAY_NAME};

    Cursor cursor = getContentResolver().query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
            columns, selection, null, null);

    while (cursor.moveToNext()){

        Bitmap bmThumbnail;
        bmThumbnail = ThumbnailUtils.createVideoThumbnail(String.valueOf(Uri.parse(cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.DATA)))),
                MediaStore.Video.Thumbnails.MICRO_KIND);
        videoName.add(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DISPLAY_NAME)));
        videoPath.add(String.valueOf(Uri.parse(cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.DATA)))));
        videoThumbnail.add(bmThumbnail);
    }
    cursor.close();
    Toast.makeText(getApplicationContext(), ""+videoThumbnail.size(), Toast.LENGTH_LONG).show();

    VideoAdapter videoAdapter = new VideoAdapter(this, videoName,videoThumbnail);
    videolist.setAdapter(videoAdapter);

【问题讨论】:

标签: android android-layout android-intent


【解决方案1】:

将以下库添加到您的 Gradle 中:

compile 'com.github.bumptech.glide:glide:3.6.1'

然后在你的代码中做这样的事情:

Glide.with(context)
                .load(URI_OF_YOUR_VIDEO)
                .placeholder(R.drawable.ic_video_place_holder)
                .into(imageView);

它非常流畅,还可以缓存您的图像。

【讨论】:

    【解决方案2】:

    一个常见的解决方案是只生成一次缩略图,然后将它们保存到一个文件中。

    另一种选择可能是多线程,但如果设备 RAM 不足,可能会导致 OutOfMemoryError

    【讨论】:

      【解决方案3】:

      您可以使用AsyncTask 在后台线程中创建所有thumnails,以告知用户正在取得一些进展。完成所有缩略图后,您就可以进行其余的工作了。

      希望这会有所帮助。

      【讨论】:

        【解决方案4】:

        使用

        Bitmap bitmapThumb = MediaStore.Video.Thumbnails.getThumbnail(mActivity.getContentResolver(),
             Long.parseLong(video_id), 
             Images.Thumbnails.MINI_KIND, 
             options);
        

        仅供参考

        Thumbnails.MICRO_KIND for 96 x 96

        Thumbnails.MINI_KIND 512 x 384 像素

        【讨论】:

          【解决方案5】:

          是的,您可以使用 Glide 做到这一点,但不能使用 Picasso。

          Glide.with(context)
               .load(im.getUri())
               .into(holder.imageView);
          

          (我使用的是RecyclerView

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-09-24
            • 2011-08-23
            • 2011-01-16
            • 2016-01-25
            • 2011-11-04
            • 2023-03-17
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多