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