我知道它在这里多次问过,我已经经历了很多答案,但是没想到1想。
我想在ImageView
<ImageView
android:id="@+id/bg"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
android:src="@drawable/bg" />
而 bg.jpg 是650 k.b in size with 1600 x 1700 WxH resolution placed in drawable folder
。
我在少数设备上遇到内存不足错误。
我的印象是内存大小是重要的,650 k.b并不多。但是,当我阅读Displaying Bitmaps Efficiently和Loading Large Bitmaps Efficiently时:看起来解决方案才是最重要的。如果根据这些页面的配置 ARGB_8888 ,我的图片将采用 1600 x 1700 x 4字节,超过10 m.b
所以,
即使10 m.b小于每个应用程序限制16 m.b,为什么它给了我这个错误?
如上面链接中所述,如果我缩小图像,有些设备的分辨率为1200 x 2000 WxH,我将无法进行缩放,因此我得到相同的错误。
我看到加载多个全屏图像的应用程序(可滚动)而我只使用1 :(
我错过了什么?
答案 0 :(得分:0)
首先,每个应用程序堆的限制因设备而异,并不总是设置为16 MB。您的堆将包含各种对象,例如您自己初始化的活动,片段,视图和其他对象。
因此计算并不像16-10 = 6 MB那么简单。
如果您想了解有关内存分析的更多信息,请试用post。
其次,1600 x 1700分辨率的图像对于大多数Android设备屏幕来说太大了。这正是android具有资源限定符的原因,因此您可以为不同的屏幕分辨率提供缩小版本的图像。 See docs for more on this
如果您担心为不同的分辨率保持图像的纵横比,可以将ImageView.ScaleType属性设置为CENTER_INSIDE。
答案 1 :(得分:0)
使用此Bitmap.createScaledBitmap(src, dstWidth, dstHeight, filter)
这里dstWidth和dstHeight是int变量。