android中图片适配器,Android UI适配总结之图片适配(1)
由于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)相关推荐
- android中Adapter适配器的讲解
android中Adapter适配器的讲解 Adapter(适配器的讲解) 适配器就我自己来看,我觉得这是一个非常重要的知识点,Adapter是用来帮助填出数据的中间桥梁,简单点说吧:将各种数据以合适 ...
- Android中Adapter适配器的介绍以及用法的总结
Adapter(适配器的讲解) 适配器就我自己来看,我觉得这是一个非常重要的知识点,Adapter是用来帮助填出数据的中间桥梁,简单点说吧:将各种数据以合适的形式显示在View中给用户看.Adapte ...
- Android中的缓存处理及异步加载图片类的封装
一.缓存介绍: (一).Android中缓存的必要性: 智能手机的缓存管理应用非常的普遍和需要,是提高用户体验的有效手段之一. 1.没有缓存的弊端: 流量开销:对于客户端--服务器端应用,从远程获取图 ...
- android espresso跨程序,Android中使用Espresso进行UI测试
在使用Android Studio创建项目时,Android Studio一般都会自动创建测试相关的包名和类,可见测试在Android Studio开发中具有很重要的地位了,但我却从来没有使用过. 今 ...
- Android中如何利用Minui显示PNG格式的图片
在做下面操作之前,需要先干掉SurfaceFlinger进程,参考:Android中怎么方便的调试关机充电 1.Android.mk文件如下: # Copyright 2013 The Android ...
- Android中一些基础的UI组件
目录 一.TextView文本框 1.XML代码 2.结果展示 3.常见的属性 二.按钮 点击事件注册监听器的两种方式 1.普通按钮Button和图片按钮ImageButton 1.1.在XML文件中 ...
- android 自动清理缓存图片吗,Android中Glide获取缓存大小并清除缓存图片
清除Glide缓存 Glide自带清除缓存的功能,分别对应Glide.get(context).clearDiskCache();(清除磁盘缓存)与Glide.get(context).clearMe ...
- android中px单位,android中像素单位dp、px、pt、sp的比较
dp(dip): device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA.HVGA和QVGA 推荐使用这个,不依赖 ...
- Matrix: android 中的Matrix (android.graphics.Matrix) (转)
本篇博客主要讲解一下如何处理对一个Bitmap对象进行处理,包括:缩放.旋转.位移.倾斜等.在最后将以一个简单的Demo来演示图片特效的变换. 1. Matrix概述 对于一个图片变换的处理,需要Ma ...
最新文章
- 用java数组模拟登录和注册功能
- WordPress插件制作教程概述
- Android Activity的理解
- AI与医学:AI预测结合医学案例应用——当基因编辑转角遇到AI
- VSCode工程文件右侧A M U 字母的含义
- [存档]获取通讯录信息并写到SD卡上
- Bitmap详解(中)之像素级操作
- 软件保护技术--- 常见保护技巧
- 10个最常见的 HTML5 面试题及答案
- zz android touch panel
- 转载_ANC降噪学习
- JS动态添加元素后事件不起作用失效
- 面试 11、知识拓展
- Joint Autoregressive and Hierarchical Priors for Learned Image Compression文献复现
- 高速缓存对c程序的影响
- android 听筒模式外放模式的切换,YY项目之Android 听筒 扬声器 切换
- 【笨方法学PAT】1116 Come on! Let's C (20 分)
- 讨教大学|六西格玛之属性值数据一致性分析
- bucket java_桶排序(BucketSort)(java)
- mysql忘记密码(无秘登录)for Linux