由于Android的屏幕尺寸的碎片化,时至今日Android的UI适配依然是开发中必不可少的步骤。

UI适配的适配,是通过dp、权重,通配符等方式使View能按我们意愿的准确的显示在不同手机上。除了对view的尺寸适配,我们还要对图片适配,合适的把切图放在正确的位置,能有效的降低内存占用和图片变形。

本篇是对图片适配的探索

首先,准备一张200*200像素的图片(img.jpg)放在Android Studio (以下简称AS)的drawable文件目录下,

然后对比不同drawable在不同手机(dpi)下,图片的大小。

>>> xml

android:id="@+id/img"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

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

image.png

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

图片适配到这里已经结束了。

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

android中图片适配器,Android UI适配总结之图片适配(1)相关推荐

  1. android中Adapter适配器的讲解

    android中Adapter适配器的讲解 Adapter(适配器的讲解) 适配器就我自己来看,我觉得这是一个非常重要的知识点,Adapter是用来帮助填出数据的中间桥梁,简单点说吧:将各种数据以合适 ...

  2. Android中Adapter适配器的介绍以及用法的总结

    Adapter(适配器的讲解) 适配器就我自己来看,我觉得这是一个非常重要的知识点,Adapter是用来帮助填出数据的中间桥梁,简单点说吧:将各种数据以合适的形式显示在View中给用户看.Adapte ...

  3. Android中的缓存处理及异步加载图片类的封装

    一.缓存介绍: (一).Android中缓存的必要性: 智能手机的缓存管理应用非常的普遍和需要,是提高用户体验的有效手段之一. 1.没有缓存的弊端: 流量开销:对于客户端--服务器端应用,从远程获取图 ...

  4. android espresso跨程序,Android中使用Espresso进行UI测试

    在使用Android Studio创建项目时,Android Studio一般都会自动创建测试相关的包名和类,可见测试在Android Studio开发中具有很重要的地位了,但我却从来没有使用过. 今 ...

  5. Android中如何利用Minui显示PNG格式的图片

    在做下面操作之前,需要先干掉SurfaceFlinger进程,参考:Android中怎么方便的调试关机充电 1.Android.mk文件如下: # Copyright 2013 The Android ...

  6. Android中一些基础的UI组件

    目录 一.TextView文本框 1.XML代码 2.结果展示 3.常见的属性 二.按钮 点击事件注册监听器的两种方式 1.普通按钮Button和图片按钮ImageButton 1.1.在XML文件中 ...

  7. android 自动清理缓存图片吗,Android中Glide获取缓存大小并清除缓存图片

    清除Glide缓存 Glide自带清除缓存的功能,分别对应Glide.get(context).clearDiskCache();(清除磁盘缓存)与Glide.get(context).clearMe ...

  8. android中px单位,android中像素单位dp、px、pt、sp的比较

    dp(dip): device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA.HVGA和QVGA 推荐使用这个,不依赖 ...

  9. Matrix: android 中的Matrix (android.graphics.Matrix) (转)

    本篇博客主要讲解一下如何处理对一个Bitmap对象进行处理,包括:缩放.旋转.位移.倾斜等.在最后将以一个简单的Demo来演示图片特效的变换. 1. Matrix概述 对于一个图片变换的处理,需要Ma ...

最新文章

  1. 用java数组模拟登录和注册功能
  2. WordPress插件制作教程概述
  3. Android Activity的理解
  4. AI与医学:AI预测结合医学案例应用——当基因编辑转角遇到AI
  5. VSCode工程文件右侧A M U 字母的含义
  6. [存档]获取通讯录信息并写到SD卡上
  7. Bitmap详解(中)之像素级操作
  8. 软件保护技术--- 常见保护技巧
  9. 10个最常见的 HTML5 面试题及答案
  10. zz android touch panel
  11. 转载_ANC降噪学习
  12. JS动态添加元素后事件不起作用失效
  13. 面试 11、知识拓展
  14. Joint Autoregressive and Hierarchical Priors for Learned Image Compression文献复现
  15. 高速缓存对c程序的影响
  16. android 听筒模式外放模式的切换,YY项目之Android 听筒 扬声器 切换
  17. 【笨方法学PAT】1116 Come on! Let's C (20 分)
  18. 讨教大学|六西格玛之属性值数据一致性分析
  19. bucket java_桶排序(BucketSort)(java)
  20. mysql忘记密码(无秘登录)for Linux

热门文章

  1. 统信uos安装jdk
  2. 0基础学习建模,3D次世代MAYA游戏角色建模的方法
  3. eyoucms采集发布,让你轻松发布大量内容!
  4. Starting a New Job? Take Control of Your Onboarding
  5. 刷脸支付实现刷脸即会员的新亮点
  6. RationalDMIS 2020 法兰盘复合位置度测量及评价方法
  7. 第七节 服务器硬件及RAID配置
  8. mac命令行删除当前目录下的所有文件或文件夹
  9. 音视频6.3——安卓录屏实现编码成h264文件
  10. java dropdownlist_实现无刷新DropDownList联动效果