2014-02-11 105 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); 
相關問題