Android中的资源复用小技巧
前言
做了很多项目,发现每个项目里都有大量的相似图标,比如每个颜色一种、每个角度一种(左箭头、右箭头)等等,虽然这些图标很小占用不了太多资源。但是当我们需要change的时候就得一个个去替换,其实在android里有很多小技巧可以让这些资源进行复用,减少体积的同时也可以使项目结构更加清晰。
这里总结的一些比较常用的复用,包扩:自适应、变色、旋转、阴影、组合、透明度、剪裁、留白等
svg矢量图
android5.0之后android就开始支持svg矢量图了,是drawable的vector标签。
使用矢量图的好处是不用在为不同的分辨率提供不同的切图了,而且能保证显示清晰度。
在android studio中,右击drawable目录,选择new - Vector Asset,可以创建一个系统自带svg矢量图,或者通过svg、psd文件导入。
下面是一个示例额:
<vector android:height="24dp" android:tint="#FFFFFF"android:viewportHeight="24" android:viewportWidth="24"android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"><path android:fillColor="@android:color/white" android:pathData="M20.5,3l-0.16,0.03L15,5.1 9,3 3.36,4.9c-0.21,0.07 -0.36,0.25 -0.36,0.48V20.5c0,0.28 0.22,0.5 0.5,0.5l0.16,-0.03L9,18.9l6,2.1 5.64,-1.9c0.21,-0.07 0.36,-0.25 0.36,-0.48V3.5c0,-0.28 -0.22,-0.5 -0.5,-0.5zM15,19l-6,-2.11V5l6,2.11V19z"/>
</vector>
包括图片的宽高和颜色,最重要的就是path,这里面就是svg图片绘制的路径,如果懂相关语法的甚至可以自己手写一个出来。
变色
变色就是着色,在android5.0版本google出了着色器tint,可以非常方便的对图片进行着色。
(android5.0还对应的加入了取色器Palette,可以动态的在bitmap上取色并设置给其他组件,达到页面随着图片变色的效果)
比如
<ImageView...android:src="@mipmap/ic_launcher"android:tint="#FFF" />
这样可以将图片变成白色的。
但是有时候我们需要在其他xml resource中使用,比如style中使用drawable,比如想使用一个黑色的箭头,但是我们只有白色的箭头,这时候就没有tint这个属性了,那么怎么办?
我们可以使用bitmap标签,在drawable下新建一个资源xml,如下:
<?xml version="1.0" encoding="utf-8"?><bitmap xmlns:android="http://schemas.android.com/apk/res/android"android:src="@drawable/white_arrow"android:tint="#000000"></bitmap>\
然后使用这个drawable即可,但是注意这里无法使用svg矢量图,即VectorDrawable。
旋转
比如有一个左箭头,我们还需要右箭头。
一个方法是在view中设置android:rotation属性
<ImageView...android:src="@mipmap/ic_launcher"android:rotation="90" />
同样我们需要在其他xml resource中使用,可以使用rotate标签,在drawable下新建一个资源xml,如下:
<rotate xmlns:android="http://schemas.android.com/apk/res/android"android:fromDegrees="90"android:toDegrees="90"android:drawable="@drawable/fit">
</rotate>
这里可以使用svg矢量图
阴影
有时候我们有一张图片,但在不同场景使用的时候可能需要阴影,也可能不需要,甚至阴影的大小可能也不一样。
在android5.0以上我们可以直接为view设置elevation即可,如:
<ImageView...android:elevation="3dp"android:src="@drawable/fit"/>
这是google新增的层的概念,即z轴,设置elevation可以提升组件的高度,就会自动添加阴影。
组合
有时候我们有的资源是几个其他资源组合而成的,其实这时候我们没必要再重新切一个组合后的图。
使用layer-list即可,通过设置位置,并且通过上面所说的旋转等方法可以实现各种组合情况。
比如示例中:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:width="12dp"android:height="12dp"><shape android:shape="oval"><solid android:color="#009bfa" /></shape></item><itemandroid:width="6dp"android:height="6dp"android:gravity="center"><shape android:shape="oval"><solid android:color="#ffffff" /></shape></item>
</layer-list>
我们通过两个shape来实现一个类似靶子的效果。
透明度
也是使用bitmap标签即可,通过android:alpha
熟悉设置透明度。
裁剪
通过drawable的clip标签即可,注意这里裁剪后还保持原图片大小,只不过裁剪后的内容占据其中一部分
留白
Android中的资源复用小技巧相关推荐
- android图片底部居中对齐,android开发图片居中的小技巧
释放双眼,带上耳机,听听看~! 制作UI布局的时候都会出现复杂的LinearLayout嵌套,并且常常会被一些问题混淆,警惕在android中图片居中的小技巧大家都知道吗?别着急,下文是技术狗小编为大 ...
- excel的if函数中android,excel中if函数使用小技巧分享
excel中if函数使用小技巧分享[案例实操] 今天有同事问到笔者一个问题:"在EXCEL中,如何使用函数实现如下功能:在A1单元格填写A,B1单元格自动填写100,当A1单元格的内容更改为 ...
- Android Coding利器之掌握小技巧,助你Coding更上一层楼~
本文讲的是Android Coding利器之掌握小技巧,助你Coding更上一层楼~,话说前几天在网上浏览到一大牛写的关于Android布局优化的文章,看后感触很深,回过头看看自己写过的代码,发现还是 ...
- 浅析Android中build.gradle的实用技巧
1.替换符的使用 (1)在 app-android-defaultConfig (或者多渠道打包)下面可以这样使用 android {defaultConfig {manifestPlaceholde ...
- rust熔炉怎么带走_Rust游戏中12个实用小技巧,包含无伤下坠、直梯爬楼
Rust是一款第一人称生存网络游戏,有点像野外求生,但这款游戏内容则更加丰富.刺激.血腥. 在这款游戏中玩家的第一任务就是活下来,而想要活下来你将要接受饥饿.干渴.寒冷等.游戏中玩家需要建造自己的庇护 ...
- Fiddler使用过程中容易忽略的小技巧
Fiddler使用过程中容易忽略的小技巧 fiddler的基本使用,在之前的一篇博文中有详细介绍,可参见Fiddler抓包工具使用详解,今天来分享几个容易忽略的小技巧. 1.ios机装了证书,依然抓不 ...
- Android中的资源
学习内容 Android中的各种资源 国际化及资源自适应 能力目标 了解Android中资源的种类 掌握Dimension资源.Assets资源的使用 掌握样式和主题资源的使用 熟练掌握国际化和屏幕适 ...
- rust怎么放篝火_Rust游戏中12个实用小技巧,包含无伤下坠、直梯爬楼
Rust是一款第一人称生存网络游戏,有点像野外求生,但这款游戏内容则更加丰富.刺激.血腥. 在这款游戏中玩家的第一任务就是活下来,而想要活下来你将要接受饥饿.干渴.寒冷等.游戏中玩家需要建造自己的庇护 ...
- UG编程过程中的几个小技巧
UG编程过程中的几个小技巧 [一.UG运用小技巧] 当平移工作坐标系时经过向下按住ALT键,能够履行准确定位. 制图中,能够在线性尺度上用SHIFT-拖动来创立狭窄型尺度. 能够双击在资源条中的导航器 ...
最新文章
- pip安装包以后jupyter不能导入的解决办法
- 谷歌教机器人理解语义,像人一样学习复杂技能 | 附3篇论文
- RHEL5一个网卡绑定多个IP
- 132. Leetcode 461. 汉明距离 (位运算-汉明距离相关题目)
- 32位十六进制浮点数转换为十进制浮点数的方法
- SpringBoot_配置-@PropertySource、@ImportResource、@Bean
- Pandas高级教程之:统计方法
- ThreadLoacl,InheritableThreadLocal,原理,以及配合线程池使用的一些坑
- 项目经理需要的思维批判
- android开发自动提示框,Android 多种简单的弹出框样式设置代码
- java sqlite 创建_关于Java:创建3个由sqlite数据库填充的微调器
- 导入hbase_HBase基础学习之bulkload了解
- Java实现数组转字符串及字符串转数组的方法
- electron 改变窗体 大小_「Science子刊」约翰·霍普金斯大学创造灰尘大小设备,可协助药物在胃肠道停留24小时之久...
- iperf3使用方法 linux,iperf3命令使用
- FFMpeg (一) av_register_all()
- 看某帖有感(敬告我,以及我亲爱的朋友们)
- React Native多语言切换
- java中数组集合存放位置_java中数组以及集合
- flac格式怎么转换mp3格式?
热门文章
- poj 1077 Eight(A*)
- zend studio
- 创建第一个Django项目
- [转]布隆过滤器详解
- 洛谷 P1027 Car的旅行路线
- 美素数(HDU 4548)(打表,简化时间复杂度)
- chrome开发总结(交互/权限/存储)-爬虫
- JVM学习笔记:Java运行时数据区域
- GDI+中发生一般性错误的解决办法 from http://www.cnblogs.com/winzheng/archive/2008/12/23/1360440.html...
- 我的Android学习之旅--1环境配置