我在drawable目录中有一个960x1440大小的图像文件。
当应用程序启动时,图像未作为背景加载,并且在logcat中,我看到了:

位图太大,无法上载到纹理中(2880x4320,max = 4096x4096)

如果图像是960x1440,为什么会显示2880x4320?

位图是通过xml加载的:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"

    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/launcher_bg"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin">

最佳答案

/drawable/文件夹中没有任何规范的图像被认为是“默认值”,即mpdi的1dp = 1px,则因为您实际运行的设备是xxhdpi,所以图像在运行时会按比例放大。

原始图像可能是960x1440,但是从mdpixxhdpi的转换是大小的3倍,因此您的960x1440变为(3 * 960)x(3 * 1440)= 2880x4320,该纹理太大而无法应用于硬件加快意见。

因此,要解决这一问题实际上很简单,您有两种选择:

  • 将图像移动到/drawable-nodpi/很简单,可以减小.apk大小,但是低端设备可能很难加载这么大的图像。
  • 在所有密度mdpihdpixhdpixxhdpi上创建缩放图像,以避免运行时过度缩放,并在较旧的设备上显示较小的图像。
  • 10-06 09:32