2014-02-11 53 views
0

我想从服务器获取更多的10个视频缩略图到Android中的图像视图。现在,我可以成功地将缩略图的视频显示到图像视图中,但是我的问题是显示所有缩略图需要花费太多时间。所以它显示空白黑屏直到它加载所有缩略图。如何使用asynctask加载图像缩略图android

,所以我决定的AsyncTask该节目的进度条使用,直到它加载的所有小样的,但它并不显示进度条都没有。所以任何想法如何解决这个问题。

代码

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(); 
     } 
    } 
+1

使用延迟加载与UIL http://stackoverflow.com/questions/16789676/caching - 图像和显示 – Raghunandan

+0

@Raghunandan,谢谢,但我没有列表视图以及任何自定义类在这种情况下,我如何使用您的答案请帮助。我只有几个图像视图,我想要显示视频缩略图,直到它加载它应该显示进度条。而已。 – InnocentKiller

+0

你不能从backgroudn线程更新UI,你在doinbackground中设置位图是不可能的。我认为你使用listview更好。在链接你从服务器获取图像你从mediastore – Raghunandan

回答

1

做到这一点:

  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); 
+0

不是,,,这是行不通的... – InnocentKiller

0

我想你应该把

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方法,因为只要我明白那是任务发生的地方。

+0

我已经这样做了,但它不工作。 – InnocentKiller

0

在的AsyncTask有一个方法调用onProgressUpdate(Integer...),你可以使进度更新使用。 Check this link

0

试试这个

@Override 
    protected void onPreExecute() { 
     pDialog = new ProgressDialog(ShowVideo.this); 
     pDialog.setMessage("Loading Videos... Please wait..."); 
     pDialog.show(); 
    } 

而且在你的代码,如果你写loadThumbnail.get()地方去除过多,因为这将阻止用户界面线程。

0

这可能帮助:

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); 
} 

}

现在执行本任务

new SetThumb(your_image_view).execute(path_of_file); 
相关问题