RelativeLayout包含带有15个ImageButton的FrameLayout时崩溃

时间:2018-09-28 13:31:42

标签: android android-relativelayout android-framelayout

我有一个带有RelativeLayout的活动,其中有一个FrameLayout,而在FrameLayout中有15个ImageButton。只要该活动加载,应用程序就会崩溃。这是我的xml代码。

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:fitsSystemWindows="true" >
    <FrameLayout
            android:id="@+id/bodyFrontView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_alignParentStart="true"
            android:layout_below="@+id/bodyFrontBtn"
            android:layout_marginBottom="50dp"
            android:layout_alignParentLeft="true">
            <ImageButton
               android:id="@+id/head"
               android:layout_width="match_parent"
               android:layout_height="match_parent"
               android:background="@null"
               android:contentDescription="@string/app_name"
               android:scaleType="centerInside"
               android:layout_gravity="center"
               android:src="@drawable/head"
                android:clickable="false"
                android:focusable="false"/>
... so on 14
    </FrameLayout>
    </RelativeLayout>

我还没有在我的java文件中使用任何东西。但仍然会在活动加载后崩溃。

这实际上是我的日志猫

09-28 18:25:12.487 5391-5391/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.proximatesolutions.daralhajama, PID: 5391
    java.lang.RuntimeException: Canvas: trying to draw too large(189422496bytes) bitmap.
        at android.view.DisplayListCanvas.throwIfCannotDraw(DisplayListCanvas.java:229)
        at android.view.RecordingCanvas.drawBitmap(RecordingCanvas.java:97)
        at android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:529)
        at android.widget.ImageView.onDraw(ImageView.java:1367)
        at android.view.View.draw(View.java:20352)
        at android.view.View.updateDisplayListIfDirty(View.java:19297)

另外100条这样的行

2 个答案:

答案 0 :(得分:2)

从所有android:background="@null"中删除ImageButton

问题是图像的分辨率或尺寸太大。 现在您可以做两件事:

  1. 加载低分辨率(与图像按钮的高度或宽度匹配)且尺寸较小的图像

  2. 使用Glide库将图像加载到ImageButton,它将根据您要在其中显示图像的视图来更改分辨率。

在依赖关系块内的build.gradle(应用程序级别)中添加此

 compile 'com.github.bumptech.glide:glide:3.7.0'

同步您的项目。

然后在create上进行活动:

 Glide.with(this).load(R.drawable.bg).into(imageButton);

使用选项2绝对可以。

答案 1 :(得分:0)

您需要调整图像大小以适合内存,或者可以使用以下方法有效地设置图像而无需调整大小。

https://developer.android.com/topic/performance/graphics/load-bitmap