如何在android中使用asynctask加载图像缩略图
我正在尝试在android中从服务器到图像视图获取超过10个视频的缩略图。现在我可以成功地将视频的缩略图显示到图像视图中,但我的问题是显示所有缩略图花费了太多时间。因此,它将显示空白的黑屏,直到加载所有缩略图 所以我决定使用Asynctask显示进度条,直到加载的都是缩略图,但它根本不显示进度条。那么,你知道如何解决这个问题吗 代码如何在android中使用asynctask加载图像缩略图,android,image,android-asynctask,imageview,bitmapimage,Android,Image,Android Asynctask,Imageview,Bitmapimage,我正在尝试在android中从服务器到图像视图获取超过10个视频的缩略图。现在我可以成功地将视频的缩略图显示到图像视图中,但我的问题是显示所有缩略图花费了太多时间。因此,它将显示空白的黑屏,直到加载所有缩略图 所以我决定使用Asynctask显示进度条,直到加载的都是缩略图,但它根本不显示进度条。那么,你知道如何解决这个问题吗 代码 ImageView video_one, video_two, video_three, video_four, video_five; ImageView vid
ImageView video_one, video_two, video_three, video_four, video_five;
ImageView video_six, video_seven, video_eight, video_nine, video_ten;
ImageView video_ele, video_twe, video_thir, video_fort, video_fif;
String path = "http://serverlink/Fidol/upload/test.mp4";
String path1 = "http://serverlink/Fidol/upload/ABCD.mp4";
String path2 = "http://serverlink/Fidol/upload/bean.mp4";
String path3 = "http://serverlink/Fidol/upload/masti.mp4";
String path4 = "http://serverlink/Fidol/upload/ben.mp4";
Bitmap bm = ThumbnailUtils.createVideoThumbnail(path,
MediaStore.Images.Thumbnails.MICRO_KIND);
Bitmap bm1 = ThumbnailUtils.createVideoThumbnail(path1,
MediaStore.Images.Thumbnails.MICRO_KIND);
Bitmap bm2 = ThumbnailUtils.createVideoThumbnail(path2,
MediaStore.Images.Thumbnails.MICRO_KIND);
Bitmap bm3 = ThumbnailUtils.createVideoThumbnail(path3,
MediaStore.Images.Thumbnails.MICRO_KIND);
Bitmap bm4 = ThumbnailUtils.createVideoThumbnail(path4,
MediaStore.Images.Thumbnails.MICRO_KIND);
那么我已经打过电话了
new loadThumbnail().execute();
这是我的asynctask类
class loadThumbnail extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(ShowVideo.this);
pDialog.setMessage("Loading Videos... Please wait...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
protected String doInBackground(String... args) {
video_one.setImageBitmap(bm);
video_two.setImageBitmap(bm1);
video_three.setImageBitmap(bm2);
video_four.setImageBitmap(bm3);
video_five.setImageBitmap(bm4);
video_six.setImageBitmap(bm);
video_seven.setImageBitmap(bm1);
video_eight.setImageBitmap(bm2);
video_nine.setImageBitmap(bm3);
video_ten.setImageBitmap(bm4);
video_ele.setImageBitmap(bm);
video_twe.setImageBitmap(bm1);
video_thir.setImageBitmap(bm2);
video_fort.setImageBitmap(bm3);
video_fif.setImageBitmap(bm4);
return null;
}
protected void onPostExecute(String file_url) {
pDialog.dismiss();
}
}
类装入缩略图扩展异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
pDialog=新建进度对话框(ShowVideo.this);
setMessage(“正在加载视频…请稍候…”);
pDialog.setUndeterminate(假);
pDialog.setCancelable(真);
pDialog.show();
}
受保护的字符串doInBackground(字符串…args){
视频。设置图像位图(bm);
视频。设置图像位图(bm1);
视频。设置图像位图(bm2);
视频四、设置图像位图(bm3);
视频。设置图像位图(bm4);
视频。设置图像位图(bm);
视频。设置图像位图(bm1);
视频8.setImageBitmap(bm2);
视频。设置图像位图(bm3);
视频。设置图像位图(bm4);
视频元素设置图像位图(bm);
设置图像位图(bm1)之间的视频;
视频图像位图(bm2);
视频设置图像位图(bm3);
视频文件设置图像位图(bm4);
返回null;
}
受保护的void onPostExecute(字符串文件\u url){
pDialog.disclose();
}
}
执行以下操作:
video_one.setImageBitmap(bm);
video_two.setImageBitmap(bm1);
video_three.setImageBitmap(bm2);
video_four.setImageBitmap(bm3);
video_five.setImageBitmap(bm4);
video_six.setImageBitmap(bm);
video_seven.setImageBitmap(bm1);
video_eight.setImageBitmap(bm2);
video_nine.setImageBitmap(bm3);
video_ten.setImageBitmap(bm4);
video_ele.setImageBitmap(bm);
video_twe.setImageBitmap(bm1);
video_thir.setImageBitmap(bm2);
video_fort.setImageBitmap(bm3);
video_fif.setImageBitmap(bm4);
在onPostExecute中,因为您不能从doinbackground修改ui
并在doInbackground中执行此操作
Bitmap bm = ThumbnailUtils.createVideoThumbnail(path,
MediaStore.Images.Thumbnails.MICRO_KIND);
Bitmap bm1 = ThumbnailUtils.createVideoThumbnail(path1,
MediaStore.Images.Thumbnails.MICRO_KIND);
Bitmap bm2 = ThumbnailUtils.createVideoThumbnail(path2,
MediaStore.Images.Thumbnails.MICRO_KIND);
Bitmap bm3 = ThumbnailUtils.createVideoThumbnail(path3,
MediaStore.Images.Thumbnails.MICRO_KIND);
Bitmap bm4 = ThumbnailUtils.createVideoThumbnail(path4,
MediaStore.Images.Thumbnails.MICRO_KIND);
我想你应该把
Bitmap bm = ThumbnailUtils.createVideoThumbnail(path,
MediaStore.Images.Thumbnails.MICRO_KIND);
Bitmap bm1 = ThumbnailUtils.createVideoThumbnail(path1,
MediaStore.Images.Thumbnails.MICRO_KIND);
Bitmap bm2 = ThumbnailUtils.createVideoThumbnail(path2,
MediaStore.Images.Thumbnails.MICRO_KIND);
Bitmap bm3 = ThumbnailUtils.createVideoThumbnail(path3,
MediaStore.Images.Thumbnails.MICRO_KIND);
Bitmap bm4 = ThumbnailUtils.createVideoThumbnail(path4,
MediaStore.Images.Thumbnails.MICRO_KIND);
在
doInBackground
方法下,因为据我所知,这就是任务发生的地方 在AsyncTask中有一个方法调用onProgressUpdate(Integer…
,可用于进度更新。
试试这个
@Override
protected void onPreExecute() {
pDialog = new ProgressDialog(ShowVideo.this);
pDialog.setMessage("Loading Videos... Please wait...");
pDialog.show();
}
如果您在某个地方编写了loadThumbnail.get()
,也可以在代码中删除它,因为这会阻塞UI线程 这可能会有帮助:
class SetThumb extends AsyncTask<String, Void, Bitmap>{
private ImageView imageView;
SetThumb(ImageView imageView){
this.imageView=imageView;
}
@Override
protected Bitmap doInBackground(String... strings) {
return ThumbnailUtils.createVideoThumbnail(strings[0],MediaStore.Video.Thumbnails.MICRO_KIND);
}
@Override
protected void onPostExecute(Bitmap thumb){
imageView.setImageBitmap(thumb);
}
使用UIL@Raghunandan的延迟加载,谢谢,但我没有列表视图以及任何自定义类。在这种情况下,我如何使用您的答案请帮助。我只是有几个图像视图,我想在其中显示视频缩略图,直到它加载它应该显示progressbar。就是这样。你不能从后台更新ui线程你正在doinbackground中设置位图,这是不可能的。我认为最好使用listview。在链接中,您可以从服务器获取图像。在这里,您可以从服务器获取图像mediastore@Raghunandan,我可以用gridview代替listview吗???是的,你可以使用gridview,它的工作原理与listview类似
new SetThumb(your_image_view).execute(path_of_file);