OutOfMemory布局背景图像的例外

时间:2015-10-04 09:22:38

标签: java android image memory bitmap

我是android的新手,在this教程中用于在android中创建MEME应用程序一切正常,直到我将图像添加到我的RelativeLayout背景中。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:background="@drawable/dp"
    android:id="@+id/imageOut">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="@string/topText"
        android:id="@+id/topMemeText"
        android:layout_marginTop="32dp"
        android:textColor="#FFF"
        android:gravity="center_horizontal"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />


    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="@string/bottomText"
        android:id="@+id/bottomMemeText"
        android:layout_marginBottom="69dp"
        android:textColor="#FFF"
        android:gravity="center_horizontal"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true" />
</RelativeLayout>

错误是

 Caused by: java.lang.OutOfMemoryError: Failed to allocate a 86687164 byte allocation with 1048576 free bytes and 63MB until OOM

我知道这个问题是由于图像尺寸造成的,我必须对它进行解码,因为我在网上和http://developer.android.com/training/displaying-bitmaps/load-bitmap.html搜索的情况很多。但我遇到的每一个案例都使用了ImageView,但我有一个背景图片布局而不是ImageView,所以我如何从布局中获取ImageView对象,以便我可以使用。

mImageView.setImageBitmap(
    decodeSampledBitmapFromResource(getResources(), R.id.myimage, 100, 100));

由于

2 个答案:

答案 0 :(得分:1)

我的猜测是调整图像大小会导致问题。

尝试将图像添加到drawable-xxhdpi并查看它是否有帮助。

如果它没有尝试drawable-nodpi。

答案 1 :(得分:0)

First get the bitmap 
Bitmap bitmap = decodeSampledBitmapFromResource(getResources(), R.id.myimage, 100, 100);

Convert the bitmap to drawable as follows
Drawable mDrawable = new BitmapDrawable(getResources(), bitmap);

Finally you can use mDrawable to set your relative layout background