2013-03-07 42 views
0

我必須這樣創建佈局:組織許多意見

Screen Shot

正如你所看到的,所有視圖(圖像,按鈕)是一個滾動屏幕。這是一個專輯的佈局。

的問題是當我展示這張專輯屏幕,許多圖像,將其與內存不足的錯誤崩潰。

我選擇的方式是把所有的人都在LinearLayout一個ScrollView內。我知道如果我們需要展示很多視圖,我們可以使用listview,但我不能用ListView來組織所有這些視圖。

誰能幫助我?

+1

您是否使用位圖來顯示圖像?很多時候,我們正面臨OutOfMemory問題,因爲位圖 – 2013-03-07 04:02:32

+0

如果你有錯誤,那麼你的代碼在那裏你設置imagebitmap ... – QuokMoon 2013-03-07 04:17:31

+0

@AkbariDipali正確,我與許多位圖工作。 發送至: altaf我的應用程序工作正常,如果圖像在20左右,但在切換後一些屏幕或圖像數量變大 – 2013-03-07 04:44:12

回答

0

我能想到的兩個選項:

  1. 組織的項目,使得在ListView每個項目視圖都有一組交錯元素最終他們可以阻擋在外到ListView元素。每個N圖像的頂部/底部將不得不在視圖邊界上排列。您也許可以將4-6張圖像放在交錯的圖案中,以便仍然可以實現效果,但是這些元素會變成可以回收的視圖。

  2. 使用兩個ListView元素並排。您可以將OnScrollListener傳遞給每個ListView以同步滾動動作,而不管哪一個被觸摸,從而表現出它是一個視圖。通過這種方式,您可以完全交錯圖像,但由於必須從一個數據源提供兩個視圖,因此適配器需要更多工作。

0

對於製作這種類型的視圖,你必須使用線性佈局。 像這裏

線性佈局(垂直)
標題
圖像0​​ 線性佈局水平
{
線性佈局垂直
按鈕按鈕
圖像0​​ 圖像0​​ ...
}
線性佈局垂直
{
圖像0​​ 圖像
...
}

0

您可以使用inSampleSize來減少內存佔用。

這裏是我的代碼

public static Bitmap decodeAndResizeFile(File f) { 
    try { 
     // Decode image size 
     BitmapFactory.Options o = new BitmapFactory.Options(); 
     o.inJustDecodeBounds = true; 
     BitmapFactory.decodeStream(new FileInputStream(f), null, o); 

     // The new size we want to scale to 
     final int REQUIRED_SIZE = 70; 

     // Find the correct scale value. It should be the power of 2. 
     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; 
     } 

     // Decode with inSampleSize 
     BitmapFactory.Options o2 = new BitmapFactory.Options(); 
     o2.inSampleSize = scale; 
     return BitmapFactory.decodeStream(new FileInputStream(f), null, o2); 
    } catch (FileNotFoundException e) { 
    } 
    return null; 
} 

在這裏,它會使用inSampleSize解碼圖像和此代碼將找到最好的inSampleSize值你。

它的工作對我罰款。

如果您不想使用上面的代碼,您還可以使用bitmap.recycle()System.gc()來釋放未使用的內存。但是,上面的一個對我來說工作正常。你可以使用兩者中的任何一個。

objbitmap.recycle(); 
objbitmap = null; 
System.gc(); 

希望這可以解決問題!