具有带有 15 个 ImageButton 的 FrameLayout 的 RelativeLayout 崩溃
RelativeLayout having FrameLayout with 15 ImageButton in it Crashes
我有一个带有 RelativeLayout 的 activity,其中有一个 FrameLayout,在 FrameLayout 中有 15 个 ImageButton。每当 activity 加载时,应用程序就会崩溃。这是我的 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 文件中使用任何东西。但它仍然会在 activity 加载后崩溃。
这是我的logcat实际上是其中的一部分
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 行这样的行
从所有 ImageButton
中删除 android:background="@null"
问题是您的图像在分辨率或尺寸方面太大。
现在你可以做两件事:
加载低分辨率(与图像按钮的高度或宽度匹配)且尺寸较小的图像
使用Glide库加载图片到ImageButton
,它会根据你想要显示图片的视图改变分辨率。
将此添加到 build.gradle(应用程序级别)内的依赖项块
compile 'com.github.bumptech.glide:glide:3.7.0'
同步你的项目。
然后在你 activity 上创建 :
Glide.with(this).load(R.drawable.bg).into(imageButton);
使用选项 2 肯定有效。
您需要调整图像大小以适合内存,或者您可以使用以下方法有效地设置图像而无需调整大小。
https://developer.android.com/topic/performance/graphics/load-bitmap
我有一个带有 RelativeLayout 的 activity,其中有一个 FrameLayout,在 FrameLayout 中有 15 个 ImageButton。每当 activity 加载时,应用程序就会崩溃。这是我的 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 文件中使用任何东西。但它仍然会在 activity 加载后崩溃。
这是我的logcat实际上是其中的一部分
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 行这样的行
从所有 ImageButton
android:background="@null"
问题是您的图像在分辨率或尺寸方面太大。 现在你可以做两件事:
加载低分辨率(与图像按钮的高度或宽度匹配)且尺寸较小的图像
使用Glide库加载图片到
ImageButton
,它会根据你想要显示图片的视图改变分辨率。
将此添加到 build.gradle(应用程序级别)内的依赖项块
compile 'com.github.bumptech.glide:glide:3.7.0'
同步你的项目。
然后在你 activity 上创建 :
Glide.with(this).load(R.drawable.bg).into(imageButton);
使用选项 2 肯定有效。
您需要调整图像大小以适合内存,或者您可以使用以下方法有效地设置图像而无需调整大小。
https://developer.android.com/topic/performance/graphics/load-bitmap