作者:晨曦dora | 来源:互联网 | 2023-06-16 15:59
APK作为Android系统安装包的文件格式,一直备受广大用户的关注,APK越是臃肿肥大,在下载安装过程中,它们耗费的流量会越多,安装等待时间也会越长;对于产品本身,意味着下载转化率会越低(因为竞品中,用户有更多机会选择那个体验最好,功能最多,性能最好,包最小的);对于研发来说,是一种优化改进技术的机会。今天老司机将带领大家一起探讨下APK脂肪含量最高的图片资源瘦身套路。
套路七:用代码代替图片
使用shape制作背景图
很多背景图比如按钮的背景、纯色背景都是可以用shape来制作的,这样仅用xml代码就能代替png资源。比如这么要给按钮背景图(纯色背景、带边框、圆角)可以用shape而不是png图片来制作:
<selector
xmlns:android&#61;"http://schemas.android.com/apk/res/android"><item><shape><stroke android:width&#61;"0.5dp" android:color&#61;"&#64;android:color/white"/><gradient android:startColor&#61;"#ffffff" android:endColor&#61;"#ffffff" android:angle&#61;"0.0" /><corners android:topLeftRadius&#61;"4dp" android:topRightRadius&#61;"0dp" android:bottomLeftRadius&#61;"4dp" android:bottomRightRadius&#61;"0dp" />shape>item>
selector>
用RotateDrawable代替仅仅是方向不同的“内容相同”的图片
这里两个图片是两个按钮箭头&#xff0c;但是仅仅方向不同而已&#xff0c;其实可以只用其中一个图片即可&#xff0c;而另一个用RotateDrawable来让其“调转”180度&#xff1a;
<rotate xmlns:android&#61;"http://schemas.android.com/apk/res/android"android:drawable&#61;"&#64;drawable/ic_arrow_left"android:fromDegrees&#61;"180"android:pivotX&#61;"50%"android:pivotY&#61;"50%"android:toDegrees&#61;"180" />
用layer-list来制作多层图片从而达到复用
有些需求中需要一种图片&#xff0c;但是明显这个图片是其他几个图片简单叠加而已&#xff0c;那么可以使用layer-list来达到目的&#xff1a;
<layer-list xmlns:android&#61;"http://schemas.android.com/apk/res/android"><item><rotate android:pivotX&#61;"0" android:pivotY&#61;"0"android:fromDegrees&#61;"-10" android:toDegrees&#61;"-10"><bitmap android:src&#61;"&#64;mipmap/ic_launcher"/>rotate>item><item><rotate android:pivotX&#61;"0" android:pivotY&#61;"0"android:fromDegrees&#61;"15" android:toDegrees&#61;"15"><bitmap android:src&#61;"&#64;mipmap/ic_launcher"/>rotate>item><item><rotate android:pivotX&#61;"0" android:pivotY&#61;"0"android:fromDegrees&#61;"35" android:toDegrees&#61;"55"><bitmap android:src&#61;"&#64;mipmap/ic_launcher"/>rotate>item>
layer-list>
套路八&#xff1a;用一张图片实现按钮按下和普通效果的样式
方法&#xff1a;使用selector做遮罩&#xff0c;原图做background
我们做按钮的时候经常需要用两个图片来实现按钮点击和普通状态的样式&#xff0c;这就需要提供两种图片&#xff0c;而且每个分辨率下还有多套图片&#xff0c;大大增加了apk的大小。
我们希望让这两张图片合二为一&#xff0c;而且还能实现两种或者多种状态&#xff0c;怎么做呢&#xff1f;我们首先建立一个圆形的selector&#xff0c;正常情况下是完全透明的&#xff0c;按下后透明度变小。
castiel_selector.xml
<selector xmlns:android&#61;"http://schemas.android.com/apk/res/android"><item android:state_pressed&#61;"true"><shape android:shape&#61;"oval"><solid android:color&#61;"#21000000" />shape>item><item><shape android:shape&#61;"oval"><solid android:color&#61;"#00000000" />shape>item>
selector>
然后我们需要把selector文件当作遮罩&#xff0c;用上面的安卓icon作为bg&#xff0c;放到一个ImageButton中&#xff1a;
<LinearLayout xmlns:android&#61;"http://schemas.android.com/apk/res/android"xmlns:tools&#61;"http://schemas.android.com/tools"android:layout_width&#61;"match_parent"android:layout_height&#61;"match_parent"android:orientation&#61;"vertical"><ImageButton
android:id&#61;"&#64;&#43;id/btn_test"android:layout_width&#61;"100dp"android:layout_height&#61;"100dp"android:src&#61;"&#64;drawable/castile_selector"android:background&#61;"&#64;mipmap/ic_launcher" />LinearLayout>
总结
通过以上八大套路&#xff0c;相信已上车的小伙伴都能很好地掌握APK图片资源瘦身方法&#xff0c;选择适合自己项目的套路&#xff0c;相信你的APK会成功瘦掉图片资源这块脂肪。
参考链接&#xff1a;
http://www.cnblogs.com/tianzhijiexian/p/4505190.html
http://www.cnblogs.com/soaringEveryday/p/5254520.html
安卓开发高级技术交流QQ群&#xff1a;108721298 欢迎入群
微信公众号&#xff1a;mobilesafehome
&#xff08;本公众号支持投票&#xff09;