图像视图太多; outofmemory错误

时间:2014-02-24 18:03:31

标签: android imageview png out-of-memory

我正在制作一个必须使用40 图像视图来显示png文件的布局的应用程序。布局文件的XML代码如下。该布局包含的图像文件将被用户拍摄这些图片后从相机拍摄的其他图像视图替换。

<?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%来解决了这个问题(即,如果2 kb然后减小到1 kb)。

现在的问题是这些图像的分辨率很低,看起来不太好。如果您对如何解决这个问题有任何想法,那将非常有帮助。我已经阅读了有关处理位图的文档,并尝试了一些在stackoverflow中提到但没有任何好结果的建议。提前谢谢。

2 个答案:

答案 0 :(得分:0)

可能会尝试将您的图片加载到您的网站,并使用“WebView”更改每个“imageView”并上传每个图片,如下所示:

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" >

答案 1 :(得分:0)

使用带有适配器的内容,例如gridviewlistview ....

使适配器为视图上的子视图动态加载数据的视图。您的应用内存不足,因为您一次加载了所有40张图片。

位图占用大量内存,请确保您没有加载的数据超出图像大小所需的数据。即,当您的应用仅显示缩略图时,请勿加载全屏图像的数据。您可以查看关于有效加载大位图的android指南here

相关问题