热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

老司机谈APK瘦身套路图片资源篇

APK作为Android系统安装包的文件格式,一直备受广大用户的关注,APK越是臃肿肥大,在下载安装过程中,它们耗费的流量会

       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;

Android安全技术大本营



推荐阅读
  • 如何在应用中添加Banner广告
    本文详细介绍如何在移动应用中集成并添加Banner广告,包括必要的准备工作、代码实现及常见问题解决方法,帮助开发者快速掌握添加Banner广告的技术要点。 ... [详细]
  • Android开发技巧:实现带描边的圆角图片
    本文介绍了一种在Android应用中实现带描边的圆角图片的方法。通过使用BitmapShader类,开发者可以轻松地为图片添加圆角和描边效果,提升应用的视觉体验。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 本文介绍如何使用Python进行文本处理,包括分词和生成词云图。通过整合多个文本文件、去除停用词并生成词云图,展示文本数据的可视化分析方法。 ... [详细]
  • 本文详细介绍了如何在现有的Android Studio项目中集成JNI(Java Native Interface),包括下载必要的NDK和构建工具,配置CMakeLists.txt文件,以及编写和调用JNI函数的具体步骤。 ... [详细]
  • Android中实现复合旋转动画效果
    本文将探讨如何在Android应用中实现动态且吸引人的旋转动画。通过结合多种动画类型,如透明度变化、旋转、缩放和位移,可以创造出更为复杂的视觉效果。我们将从XML布局和Java代码两个方面进行详细介绍。 ... [详细]
  • Android商城应用开发指南(第二部分):创建启动欢迎页
    大多数商城应用程序在启动时会显示一个欢迎页面,以提升用户体验。本文将指导您如何实现一个基本的欢迎页,该页面会在用户打开应用后短暂展示,随后自动跳转至主界面。 ... [详细]
  • 本文记录了Android学习的初期阶段,包括Android的基本架构、Dalvik虚拟机与JVM的区别、ADB工具的使用以及应用程序的打包安装流程。 ... [详细]
  • 本文介绍了ADB(Android Debug Bridge)的基本概念、安装方法、环境配置、连接真机步骤以及常用命令和高级技巧。ADB是一个强大的工具,适用于Android设备的开发和调试。 ... [详细]
  • 解决Android测试包与正式版APK冲突的方法
    本文介绍了一种有效的方法来避免Android测试包APK覆盖正式版APK的问题,主要通过调整build.gradle文件中的applicationId以及修改APK名称来实现。这种方法特别适用于需要频繁进行小范围功能更新的项目。 ... [详细]
  • 本文分享了作者在蚂蚁集团内部转岗过程中经历的四轮技术面试及一次项目负责人面谈的详细情况,旨在为准备类似面试的读者提供参考。 ... [详细]
  • Gradle基础概念与实践指南
    本文详细介绍了Gradle的基本概念、Groovy语言基础、Gradle的生命周期、项目管理以及任务配置等内容,旨在帮助开发者更好地理解和使用Gradle构建工具。 ... [详细]
  • 介绍了一款适用于Mac系统的APK重签名脚本——AndroidResign。该脚本通过一系列预设命令,实现了对APK文件的快速重签名操作,简化了开发者在发布或测试阶段对应用签名的需求。 ... [详细]
author-avatar
晨曦dora
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有