由于Android的屏幕尺寸的碎片化,时至今日Android的UI适配依然是开发中必不可少的步骤。
UI适配的适配,是通过dp、权重,通配符等方式使View能按我们意愿的准确的显示在不同手机上。除了对view的尺寸适配,我们还要对图片适配,合适的把切图放在正确的位置,能有效的降低内存占用和图片变形。
本篇是对图片适配的探索
首先,准备一张200*200像素的图片(img.jpg)放在Android Studio (以下简称AS)的drawable文件目录下,
然后对比不同drawable在不同手机(dpi)下,图片的大小。
>>> xml
android:id="@+id/img"
android:layout_
android:layout_
android:src="@drawable/img"
/>
>>> java 打印当前手机中图片的大小
private void printBitmapSize(ImageView imageView) {
Drawable drawable = imageView.getDrawable();
if (drawable != null) {
BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
Bitmap bitmap = bitmapDrawable.getBitmap();
Log.i("sky", " width = " + bitmap.getWidth() + " height = " + bitmap.getHeight());
} else {
Log.i("sky", "Drawable is null !");
}
}
Android中图片默认类型是AEGB_8888,故width*height4=占用内存大小(B)
通过查看AS中的profiler查看内存占用,
MI 4 (MIUI10、1980*1080、xxhdpi、480dpi)当不加载图片时的初始内存为23.6*
drawable
内存大小
图片尺寸
mdpi
55.6-23.6= 30m
3000 ->34.3
hdpi
35.6-23.6= 12m
2000 -> 15.25
xhdpi
29.2-23.6= 5.6
1500 -> 8.58
xxhdpi
21.1-23.6= -2.5
1000 -> 3.81
xxxhdpi
19-23.6= -4.6
750 -> 2.14
MZ 6p(Flyme7、1920*1080、 xxhdpi、480dpi)当不加载图片的初始内存为41.4
drawable
内存大小
图片尺寸
mdpi
116.5-41.4= 75.1
3000->34.3
hdpi
75.1-41.4= 33.7
2000->15.25
xhdpi
58.6-41.4= 17.2
1500->8.58
xxhdpi
50.4-41.4= 9.0
1000->3.81
xxxhdpi
47.1-41.4= 5.7
750->2.14
从上面可以看出本来应该放在xxhdpi中的图片,当放置低于xxhdpi的文件夹目录,会产生内存占用增大(图片显示尺寸增大);当放置高于xxhdpi的文件夹目录,会产生内存占用减小(图片显示尺寸减小);
PS:敲黑板,仔细看参数的同学一定发现了计算的内存占用和实际内存占用对不上,在小米4中甚至出现了加载图片内存反而变小的情况。。。。
原因呢?
我也不知道。有知道的同学请指教。
不过我们的重点不在值是否正确,而是放在不同dpi目录下对内存影响的趋势,对不!对比上面表格内的内存占用基本也符合下图的比例(2 3 4 6 8)。
var cpro_id = "u6885494";