Android UI适配总结之图片适配(1)

由于Android的屏幕尺寸的碎片化,时至今日Android的UI适配依然是开发中必不可少的步骤。
UI适配的适配,是通过dp、权重,通配符等方式使View能按我们意愿的准确的显示在不同手机上。除了对view的尺寸适配,我们还要对图片适配,合适的把切图放在正确的位置,能有效的降低内存占用和图片变形。

本篇是对图片适配的探索

首先,准备一张200*200像素的图片(img.jpg)放在Android Studio (以下简称AS)的drawable文件目录下,
然后对比不同drawable在不同手机(dpi)下,图片的大小。

>>> xml


>>>  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)。


image.png

补充下,(点9)图片,左上是拉伸,右下是内容显示区域

图片适配到这里已经结束了。
简单总结下:把正确的切图放在正确的dpi文件目录,能有效的解决开发中可能遇到的图片内存占用过大和显示尺寸不正确情况;

你可能感兴趣的:(Android UI适配总结之图片适配(1))