2013-02-01 36 views
0

嗨,我有一組SD卡上的圖像路徑,所有的圖像都很大,如1024 * 768像素。網格視圖中的延遲加載圖像解碼從SD卡的圖像路徑

我需要在網格視圖中顯示所有這些圖像並縮小圖像。我需要先顯示網格視圖,然後加載一個生成的縮小圖像。我怎樣才能做到這一點。

這裏現在是:

讓所有圖像路徑,

File imgFile = new File(pathToImageOnSD); 
      if (imgFile.exists()) { 

       BitmapFactory.Options op = new BitmapFactory.Options(); 
       op.inSampleSize = 4; 

       Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath()); 

       item.bitmap = myBitmap; 
       imageview.setImageBitmap(myBitmap); 

      } 

我做這行的每個圖像路徑,和我一起內存出錯而結束。有庫來從url加載圖像,但我需要一個類似的加載SD卡上的本地圖像。

編輯:

public Bitmap loadBitmapFromPath(File f) { 
      // decodes image and scales it to reduce memory consumption 

      try { 
       // decode image size 
       BitmapFactory.Options o = new BitmapFactory.Options(); 
       o.inJustDecodeBounds = true; 
       FileInputStream stream1 = new FileInputStream(f); 
       BitmapFactory.decodeStream(stream1, null, o); 
       stream1.close(); 

       // Find the correct scale value. It should be the power of 2. 
       final int REQUIRED_SIZE = 70; 
       int width_tmp = o.outWidth, height_tmp = o.outHeight; 
       int scale = 1; 
       while (true) { 
        if (width_tmp/2 < REQUIRED_SIZE || height_tmp/2 < REQUIRED_SIZE) 
         break; 
        width_tmp /= 2; 
        height_tmp /= 2; 
        scale *= 2; 
       } 

       if (scale >= 2) { 
        scale /= 2; 
       } 

       // decode with inSampleSize 
       BitmapFactory.Options o2 = new BitmapFactory.Options(); 
       o2.inSampleSize = scale; 
       FileInputStream stream2 = new FileInputStream(f); 
       Bitmap bitmap = BitmapFactory.decodeStream(stream2, null, o2); 
       stream2.close(); 
       return bitmap; 
      } catch (FileNotFoundException e) { 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      return null; 
     } 

我用上面的方法來縮小位圖,它的工作完美。但我的問題是,當我滾動網格的意見重繪和流動不平滑,如何緩存這些位圖和如何延遲加載它們,以便我不需要等待視圖完全填充。

回答

1

爲了節省內存,請始終將位圖解碼爲您打算顯示它們的大小。對於這個問題,官方文檔是你最好的朋友。下載BitmapFun項目,確切地說明如何正確執行此操作。 https://developer.android.com/training/displaying-bitmaps/index.html

+0

嗨@krylez感謝您的回覆它修復了我的問題的一部分..我編輯了更新的問題。 – sukarno

+0

BitmapFun項目回答你所有的問題。它演示瞭如何異步獲取圖像以及如何高效地緩存圖像。花點時間閱讀一下,真正理解它。 – Krylez

+0

是的,你是對的,樣品有一切,但我只需要使我的工作的一部分,並不能理解一些事情,如果你能解釋我樣品我可以使用哪些類會更好。在此先感謝您的答覆並接受 – sukarno