簡體   English   中英

如何為 SD 卡中的視頻創建縮略圖。?

[英]How to create thumbnails for videos from sd card.?

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

將以下庫添加到您的 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);

它非常流暢,還可以緩存您的圖像。

一種常見的解決方案是只生成一次縮略圖,然后將它們保存到文件中。

另一種選擇可能是多線程,但如果設備 RAM 低,可能會導致OutOfMemoryError

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

供參考

Thumbnails.MICRO_KIND 為 96 x 96

Thumbnails.MINI_KIND 為 512 x 384 像素

您可以使用AsyncTask在后台線程中創建所有thumnails ,提示用戶正在進行某些進展。 完成所有縮略圖后,您就可以完成其余的工作。

希望這可以幫助。

是的,你可以用 Glide 做到這一點,但不能用畢加索。

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

(我正在使用RecyclerView

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM