如何从SD卡创建视频缩略图。

时间:2016-01-27 07:01:48

标签: android android-layout android-intent

我是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);

5 个答案:

答案 0 :(得分:1)

将以下库添加到Gradle:

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

然后在你的代码中执行以下操作:

html {
  font-size: font-size: 10px;;
}

p {
  font-size: 1.2rem; /* will be 12px
}

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

使用

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 for 512 x 384 px

答案 3 :(得分:0)

您可以使用thumnails在后​​台主题中创建所有AsyncTask,以暗示用户正在进行某些进展。完成所有缩略操后,您可以完成剩下的工作。

希望这有帮助。

答案 4 :(得分:0)

是的,您可以使用Glide来做到这一点,而不能使用Picasso来实现。

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

(我正在使用RecyclerView