我正在与此工厂一起通过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.
通过按照this答案中的建议将其放入drawable-xxhdpi
中,这两个设备现在都看起来像这样:
我真正不想要的东西(第一种方法是正确的方法)。为什么以及如何解决这个问题?
答案 0 :(得分:0)
2341x1246 PNG 2.55 MB
画布:试图绘制太大( 142936136bytes )位图
这似乎不是一个好方法。减小图像的尺寸,然后将图像放入drawable
目录中。
发生这种情况是因为您将图片放在“ drawable- xxhdpi ”中。看看尺寸in here。
但是,按照我的建议进行操作之后,请使用FIT_XY
调整图像大小:
imageView.scaleType = ImageView.ScaleType.FIT_XY
您的应用程序中不需要2.5 MB的图像。这样的大小实在太多了。
答案 1 :(得分:0)
为避免此错误,请尝试使用尽可能小的图像分辨率,而且图像视图也应该很小,您也可以在较大和高分辨率的设备上获得OOM。 最好的方法是在背景视图上使用png图像,其中背景可以是纯色或渐变。这样,您可以使用较小的图像,而这些图像可能不需要占据整个屏幕尺寸。