Bitmap
-
如何计算一张 Bitmap 在内存中的大小呢?
1
bitmap.getByteCount();
-
一张图片占用的内存和什么有关?
- 图片本身的像素尺寸。
- 加载的格式,ARGB_8888 每像素占4 Byte, 比 RGB_565 大一倍。
- 所放文件夹和手机屏幕dpi的比例,比如放在 mdpi 中的图片,加载在480dpi的设备上,内存占用要乘以480/160,内存占用整整大了3倍,所以这个是非常重要的。查看更多有关 DPI 的资料。
图片使用最佳实践
-
如果是单色的图片,优先考虑 IconFont。
-
如果图片比较简单,考虑使用 Vector Drawable。
-
图片尽可能复用:
-
使用旋转,缩放,动画来复用图片
1 2 3 4 5 6
<!--一张图片明明旋转下就满足要求了,就不要再创建另一张了--> <?xml version="1.0" encoding="utf-8"?> <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@mipmap/ic_launcher" android:fromDegrees="90" android:toDegrees="90" />
-
使用 Tint 着色器:为 ImageView 添加属性即可改变 ImageView 上图片的显示颜色。
1
andorid:tint="@color/colorAccent"
-
-
选用合适的色彩模式,如果不用 alpha 通道,就用 RGB_565,否则用 ARGB_8888。
-
大图小用用采样,计算合适的 inSampleSize 值,不浪费内存。比如
ImageView 的尺寸只有 100*100,而图片是1080*500 的,完全没有必要将原图加载进来,可以计算合适的 inSampleSize 来加载图片,不用花“冤枉内存”。
使用 Glide,它已经把这些事情做好了,即使是加载 R.drawable / R.mipmap 中的图片,也推荐使用 Glide 来加载。
-
小图大用用矩阵(Matrix):加载小尺寸的图片,通过 Matrix 放大后给再显示。