[英]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.