位图太大,无法上传到纹理中

and*_*lli 11 android textures bitmap

我在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">
Run Code Online (Sandbox Code Playgroud)

Bud*_*ius 48

/drawable/没有任何规格的文件夹中的图像被认为是"默认",即1dp = 1px,那是mpdi因为您实际运行的设备是xxhdpi在运行时放大的图像.

原始图像可能是960x1440,但是从转换mdpixxhdpi3倍大小,所以你960x1440成为(3×960)×(3×1440)= 2880x4320,这是太大的纹理应用到硬件加速意见.

所以要解决这个问题实际上很简单,你有两个选择:

  1. 将图像移动到/drawable-nodpi/简单,减小.apk大小,但低端设备可能很难加载这么大的图像.
  2. 创建所有密度缩放的图像mdpi,hdpi,xhdpi,xxhdpi避免过度缩放运行时和在旧设备有更小的图像.