2014-02-24 63 views
1

我正在製作一個應用程序,它必須使用如下圖所示的40 圖片視圖,每個圖片顯示一個png文件。下面是佈局文件的XML代碼。該佈局包含圖像文件,這些圖像文件將在用戶拍攝這些照片後從相機拍攝的其他圖像視圖中替換。太多imageview; outofmemory錯誤

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:orientation="vertical" > 

    <TextView 
     android:id="@+id/texViewAssignAlphabets" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:background="@color/LightGrey" 
     android:contentDescription="@string/desc_icon_image" 
     android:gravity="center" 
     android:minHeight="30dp" 
     android:text="@string/letter_assign" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <TableLayout 
     android:layout_width="wrap_content" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:stretchColumns="*" > 

     <TableRow 
      android:id="@+id/tableRow1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:weightSum="6" > 

      <ImageView 
       android:id="@+id/imageViewA" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_a" /> 

      <ImageView 
       android:id="@+id/imageViewB" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_b" /> 

      <ImageView 
       android:id="@+id/imageViewC" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_c" /> 

      <ImageView 
       android:id="@+id/imageViewD" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_d" /> 

      <ImageView 
       android:id="@+id/imageViewE" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_e" /> 

      <ImageView 
       android:id="@+id/imageViewF" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_f" /> 
     </TableRow> 

     <TableRow 
      android:id="@+id/tableRow2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:weightSum="6" > 

      <ImageView 
       android:id="@+id/imageViewG" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_g" /> 

      <ImageView 
       android:id="@+id/imageViewH" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_h" /> 

      <ImageView 
       android:id="@+id/imageViewI" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_i" /> 

      <ImageView 
       android:id="@+id/imageViewJ" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_j" /> 

      <ImageView 
       android:id="@+id/imageViewK" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_k" /> 

      <ImageView 
       android:id="@+id/imageViewL" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_l" /> 
     </TableRow> 

     <TableRow 
      android:id="@+id/tableRow3" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:weightSum="6" > 

      <ImageView 
       android:id="@+id/imageViewM" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_m" /> 

      <ImageView 
       android:id="@+id/imageViewN" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_n" /> 

      <ImageView 
       android:id="@+id/imageViewO" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_o" /> 

      <ImageView 
       android:id="@+id/imageViewP" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_p" /> 

      <ImageView 
       android:id="@+id/imageViewQ" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_q" /> 

      <ImageView 
       android:id="@+id/imageViewR" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_r" /> 
     </TableRow> 

     <TableRow 
      android:id="@+id/tableRow4" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:weightSum="6" > 

      <ImageView 
       android:id="@+id/imageViewS" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_s" /> 

      <ImageView 
       android:id="@+id/imageViewT" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_t" /> 

      <ImageView 
       android:id="@+id/imageViewU" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_u" /> 

      <ImageView 
       android:id="@+id/imageViewV" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_v" /> 

      <ImageView 
       android:id="@+id/imageViewW" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_w" /> 

      <ImageView 
       android:id="@+id/imageViewX" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_x" /> 
     </TableRow> 

     <TableRow 
      android:id="@+id/tableRow5" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:weightSum="6" > 

      <ImageView 
       android:id="@+id/imageViewY" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_y" /> 

      <ImageView 
       android:id="@+id/imageViewZ" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_z" /> 

      <ImageView 
       android:id="@+id/imageViewAwithDoubleDotabove" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_a_withdoubledotsabove" /> 

      <ImageView 
       android:id="@+id/imageViewOWithDoubleDotAbove" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_o_withdoubledotsabove" /> 

      <ImageView 
       android:id="@+id/imageViewAWithCircleAbove" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_a_circleabove" /> 

      <ImageView 
       android:id="@+id/imageViewDot" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_dot" /> 
     </TableRow> 

     <TableRow 
      android:id="@+id/tableRow6" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:weightSum="6" > 

      <ImageView 
       android:id="@+id/imageViewExclaim" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_exclamation" /> 

      <ImageView 
       android:id="@+id/imageViewLetterDash" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_dash" /> 

      <ImageView 
       android:id="@+id/imageView0" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_0" /> 

      <ImageView 
       android:id="@+id/imageView1" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_1" /> 

      <ImageView 
       android:id="@+id/imageView2" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_2" /> 

      <ImageView 
       android:id="@+id/imageView3" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_3" /> 
     </TableRow> 

     <TableRow 
      android:id="@+id/tableRow7" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:weightSum="6" > 

      <ImageView 
       android:id="@+id/imageView4" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_4" /> 

      <ImageView 
       android:id="@+id/imageView5" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_5" /> 

      <ImageView 
       android:id="@+id/imageView6" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_6" /> 

      <ImageView 
       android:id="@+id/imageView7" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_7" /> 

      <ImageView 
       android:id="@+id/imageView8" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_8" /> 

      <ImageView 
       android:id="@+id/imageView9" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/letter_9" /> 
     </TableRow> 



    </TableLayout> 

    <RelativeLayout 
     android:layout_width="fill_parent" 
     android:layout_height="15dp" 
     android:layout_weight="0.05" 
     android:background="@color/LightGrey" 
     android:gravity="left" 
     android:orientation="horizontal" > 

     <ImageView 
      android:id="@+id/imageViewPhotoJustCropped" 
      android:layout_width="50dp" 
      android:layout_height="match_parent" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentTop="true" 
      android:layout_marginLeft="5dp" 
      android:contentDescription="@string/desc_icon_image" /> 

     <Button 
      android:id="@+id/OkButton" 
      style="?android:attr/buttonStyleSmall" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentTop="true" 
      android:layout_centerHorizontal="true" 
      android:layout_marginTop="5dp" 
      android:background="@drawable/button_bg" 
      android:contentDescription="@string/desc_icon_image" 
      android:minHeight="30dp" 
      android:minWidth="40dp" 
      android:text="@string/ok_btn" 
      android:visibility="gone"/> 

    </RelativeLayout> 



     </LinearLayout> 

問題是,當我嘗試在活動中設置此佈局。它給了我內存不足的錯誤。我知道這是因爲我使用的圖像數量龐大導致內存泄漏。我通過將圖像尺寸縮小了近50%(即,如果2kb然後縮小到1kb)來解決了這個問題。

現在的問題是這些圖像的分辨率太低,看起來不太好。如果你對如何解決這個問題有任何想法,那麼這將非常有幫助。我已經閱讀了關於處理位圖的文檔,並在stackoverflow中嘗試了一些在這裏提到的建議,但沒有任何好的結果。先謝謝你。

+0

嘗試和使用像畢加索圖像懶惰裝載機 –

+0

我很抱歉,但我沒有得到你的意思? – 1011

+2

您應該更好地使用gridView並在其適配器中重新使用imageViews。 – Devrim

回答

0

可以嘗試將您的圖像加載到你的網站,並更改每一個「ImageView的」用「的WebView」並上傳這樣的每個圖像:通過添加

webview001=(WebView)findViewById(R.id.webview001); 
WebSettings webSettings1 = webview001.getSettings(); 
webSettings1.setLoadWithOverviewMode(true); 
webSettings1.setUseWideViewPort(true); 
webview001.loadData("<html><head><style type='text/css'>body{margin:auto auto;text-align:center;} img{width:100%25;} </style></head><body><img src='http://yourimageurlposition'/></body></html>" ,"text/html", "UTF-8"); 

或嘗試使用更多的內存設備上你manifest.xml的這條線

<application 
     ..... 
     ...... 
     android:largeHeap="true" > 
+0

這不回答我的問題,所以不接受作爲答案! – 1011

0

使用的東西,需要一個適配器,像gridviewlistview ....

意見指出,採取適配器爲屏幕上的子視圖動態加載數據。您的應用內存不足,因爲您一次加載全部40張圖像。

位圖佔用大量內存,請確保您沒有加載比您需要的圖片大小更多的數據。即當您的應用只顯示縮略圖時,請勿加載全屏圖像的數據。您可以查看Android指南有效地加載大型位圖here

+0

謝謝你的回答。我有這個問題 – 1011