我通过这个工厂的ImageSwitcher显示图像:
view_background.setFactory {
val imageView = ImageView(this@MainActivity)
imageView.scaleType = ImageView.ScaleType.CENTER_CROP
imageView
}
我正在Nexus 5仿真器上正确显示这个2341x1246 PNG
2.55 MB图像:
但是,如果我在Nexus 6上使用它,它会崩溃:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.llovagn.t4r, PID: 4693
java.lang.RuntimeException: Canvas: trying to draw too large(142936136bytes) bitmap.
按照drawable-xxhdpi
回答中的建议把它放在this中,它现在在两个设备上都是这样的:
哪些是我不想要的东西(第一种方式是正确的)。为什么以及如何解决这个问题?
2341x1246 PNG 2.55 MB
画布:试图绘制太大(142936136bytes)的位图
这看起来不是一个好方法。减小图像的大小并将图像放在drawable
目录中。
这是因为你把图片放在“drawable-xxhdpi”里面。看看尺寸in here。
但是,按照我的建议,使用FIT_XY
来适应图像:
imageView.scaleType = ImageView.ScaleType.FIT_XY
您的应用程序中不需要2.5 MB的映像。那个尺寸太大了。
为了避免这种错误,尝试使用尽可能小的图像分辨率,图像视图也应该很小,你也可以在更大和更高分辨率的设备上获得OOM。最好的方法是在背景视图上使用png图像,其中背景可以是纯色或渐变。通过这种方式,您可以使用可能不需要填充整个屏幕尺寸的较小图像。