前言

做了很多项目,发现每个项目里都有大量的相似图标,比如每个颜色一种、每个角度一种(左箭头、右箭头)等等,虽然这些图标很小占用不了太多资源。但是当我们需要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中的资源复用小技巧相关推荐

  1. android图片底部居中对齐,android开发图片居中的小技巧

    释放双眼,带上耳机,听听看~! 制作UI布局的时候都会出现复杂的LinearLayout嵌套,并且常常会被一些问题混淆,警惕在android中图片居中的小技巧大家都知道吗?别着急,下文是技术狗小编为大 ...

  2. excel的if函数中android,excel中if函数使用小技巧分享

    excel中if函数使用小技巧分享[案例实操] 今天有同事问到笔者一个问题:"在EXCEL中,如何使用函数实现如下功能:在A1单元格填写A,B1单元格自动填写100,当A1单元格的内容更改为 ...

  3. Android Coding利器之掌握小技巧,助你Coding更上一层楼~

    本文讲的是Android Coding利器之掌握小技巧,助你Coding更上一层楼~,话说前几天在网上浏览到一大牛写的关于Android布局优化的文章,看后感触很深,回过头看看自己写过的代码,发现还是 ...

  4. 浅析Android中build.gradle的实用技巧

    1.替换符的使用 (1)在 app-android-defaultConfig (或者多渠道打包)下面可以这样使用 android {defaultConfig {manifestPlaceholde ...

  5. rust熔炉怎么带走_Rust游戏中12个实用小技巧,包含无伤下坠、直梯爬楼

    Rust是一款第一人称生存网络游戏,有点像野外求生,但这款游戏内容则更加丰富.刺激.血腥. 在这款游戏中玩家的第一任务就是活下来,而想要活下来你将要接受饥饿.干渴.寒冷等.游戏中玩家需要建造自己的庇护 ...

  6. Fiddler使用过程中容易忽略的小技巧

    Fiddler使用过程中容易忽略的小技巧 fiddler的基本使用,在之前的一篇博文中有详细介绍,可参见Fiddler抓包工具使用详解,今天来分享几个容易忽略的小技巧. 1.ios机装了证书,依然抓不 ...

  7. Android中的资源

    学习内容 Android中的各种资源 国际化及资源自适应 能力目标 了解Android中资源的种类 掌握Dimension资源.Assets资源的使用 掌握样式和主题资源的使用 熟练掌握国际化和屏幕适 ...

  8. rust怎么放篝火_Rust游戏中12个实用小技巧,包含无伤下坠、直梯爬楼

    Rust是一款第一人称生存网络游戏,有点像野外求生,但这款游戏内容则更加丰富.刺激.血腥. 在这款游戏中玩家的第一任务就是活下来,而想要活下来你将要接受饥饿.干渴.寒冷等.游戏中玩家需要建造自己的庇护 ...

  9. UG编程过程中的几个小技巧

    UG编程过程中的几个小技巧 [一.UG运用小技巧] 当平移工作坐标系时经过向下按住ALT键,能够履行准确定位. 制图中,能够在线性尺度上用SHIFT-拖动来创立狭窄型尺度. 能够双击在资源条中的导航器 ...

最新文章

  1. pip安装包以后jupyter不能导入的解决办法
  2. 谷歌教机器人理解语义,像人一样学习复杂技能 | 附3篇论文
  3. RHEL5一个网卡绑定多个IP
  4. 132. Leetcode 461. 汉明距离 (位运算-汉明距离相关题目)
  5. 32位十六进制浮点数转换为十进制浮点数的方法
  6. SpringBoot_配置-@PropertySource、@ImportResource、@Bean
  7. Pandas高级教程之:统计方法
  8. ThreadLoacl,InheritableThreadLocal,原理,以及配合线程池使用的一些坑
  9. 项目经理需要的思维批判
  10. android开发自动提示框,Android 多种简单的弹出框样式设置代码
  11. java sqlite 创建_关于Java:创建3个由sqlite数据库填充的微调器
  12. 导入hbase_HBase基础学习之bulkload了解
  13. Java实现数组转字符串及字符串转数组的方法
  14. electron 改变窗体 大小_「Science子刊」约翰·霍普金斯大学创造灰尘大小设备,可协助药物在胃肠道停留24小时之久...
  15. iperf3使用方法 linux,iperf3命令使用
  16. FFMpeg (一) av_register_all()
  17. 看某帖有感(敬告我,以及我亲爱的朋友们)
  18. React Native多语言切换
  19. java中数组集合存放位置_java中数组以及集合
  20. flac格式怎么转换mp3格式?

热门文章

  1. poj 1077 Eight(A*)
  2. zend studio
  3. 创建第一个Django项目
  4. [转]布隆过滤器详解
  5. 洛谷 P1027 Car的旅行路线
  6. 美素数(HDU 4548)(打表,简化时间复杂度)
  7. chrome开发总结(交互/权限/存储)-爬虫
  8. JVM学习笔记:Java运行时数据区域
  9. GDI+中发生一般性错误的解决办法 from http://www.cnblogs.com/winzheng/archive/2008/12/23/1360440.html...
  10. 我的Android学习之旅--1环境配置