Mapa de bits demasiado grande para ser cargado en una textura

Tengo en el directorio dibujable un archivo de imagen con el tamaño 960×1440. Cuando se inicia la aplicación, la imagen no se carga como fondo y en el logcat veo:

Mapa de bits demasiado grande para ser cargado en una textura (2880×4320, max = 4096×4096)

¿Por qué dice 2880×4320 si la imagen es 960×1440?

El bitmap se carga a través de xml:

 

una imagen en la carpeta /drawable/ sin ninguna especificación se considera la “predeterminada”, es decir, para 1dp = 1px que es mpdi , y luego porque el dispositivo que está ejecutando realmente es xxhdpi esa imagen se xxhdpi durante el tiempo de ejecución.

La imagen original puede ser de 960×1440, pero la conversión de mdpi a xxhdpi es 3 veces el tamaño, por lo que su 960×1440 se convierte en (3 * 960) x (3 * 1440) = 2880×4320, que es una textura demasiado grande para aplicar al hardware vistas aceleradas.

entonces, para arreglar eso es bastante simple, tienes dos opciones:

  1. mueva su imagen a /drawable-nodpi/ eso es simple, reduce el tamaño de .apk, pero los dispositivos de gama más baja pueden tener dificultades para cargar una imagen tan grande.
  2. cree imágenes escaladas en todas las densidades mdpi , hdpi , xhdpi , xxhdpi para evitar el exceso de escala en el tiempo de ejecución y para tener imágenes más pequeñas en dispositivos más antiguos.