Android Drawable
2015-12-01 21:59
567 查看
Android Drawable
标签(空格分隔): AndroidAndroid的drawable有很多种类型,
Bitmap File
Nine-Patch File
Layer List
State List
Level List
Transition Drawable
Inset Drawable
Clip Drawable
Scale Drawable
Shape Drawable
Bitmap Xml
bitmap标签的一般格式为:<?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@[package:]drawable/drawable_resource" android:antialias=["true" | "false"] android:dither=["true" | "false"] android:filter=["true" | "false"] android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" | "fill_vertical" | "center_horizontal" | "fill_horizontal" | "center" | "fill" | "clip_vertical" | "clip_horizontal"] android:mipMap=["true" | "false"] android:tileMode=["disabled" | "clamp" | "repeat" | "mirror"] android:tint="@[package:]color/color_resource" android:tintMode=["add" | "multyplay" | "screen" | "src_atop" | "src_in" | "src_over"]/>
src:必须的属性,可以是一个drawable资源。
filter:如果设为true,适应View的大小而拉伸。
gravity:在View中的位置。
tileMode, tileModeX, tielModeY:平铺形式,设置平铺之后,filter和gravity失效。
tint:可以理解为给图片染色。应用中有些图片是纯色的,可以只切一张白色的图,然后加入不同的tint。比起去切图更方便,而且白色图片的体积更小。特别是应用图标需要随着主题变颜色的时候。
tintMode:一般使用src_top。
不同的tintMode产生的结果,原图是origin,tint是蓝色
![](https://images2015.cnblogs.com/blog/843715/201512/843715-20151201221457687-1515864055.png)
后来才发现,tint这个属性在API Guide里面并没有提到,因为这个在5.0以下是不支持的,不会报错,但是不会有tint的效果。但是我们可以这么做:
drawable = DrawableCompat.wrap(drawable); DrawableCompat.setTint(drawable, color);
先取出drawable,然后设置tint,再设置回去。
State-list
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" android:constantSize=["true" | "false"] android:dither=["true" | "false"] android:variablePadding=["true" | "false"] > <item android:drawable="@[package:]drawable/drawable_resource" android:state_pressed=["true" | "false"] android:state_focused=["true" | "false"] android:state_hovered=["true" | "false"] android:state_selected=["true" | "false"] android:state_checkable=["true" | "false"] android:state_checked=["true" | "false"] android:state_enabled=["true" | "false"] android:state_activated=["true" | "false"] android:state_window_focused=["true" | "false"] /> </selector>
Layer List
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item android:drawable="@[package:]drawable/drawable_resource" android:id="@[+][package:]id/resource_name" android:top="dimension" android:right="dimension" android:bottom="dimension" android:left="dimension" /> </layer-list>
当把
layer-list作为
ImageView的
src使用的时候,配合
scaleType可以让里面的图片不被拉伸。当把
layer-list作为
background使用的时候,如果直接把图片放在
item的
drawable里面,会被拉伸,为了防止拉伸,可以在
drawable里面放上
bitmap的xml资源,或者在
item里面包一层
bitmap,比如:
<item android:left="0dp" android:top="0dp"> <bitmap android:gravity="center" android:src="@drawable/ic_launcher" android:alpha="0.5" android:tint="#0f0"/> </item>
item里面也可以是
selector,这样,在一个background里面就可以有多个触摸反馈。简单的应用场景可以是这样的,一个button,不点击的时候是背景是的绿色,中间一个圆形的灰色,点击之后变为背景是红色,中间变为蓝色多的方形。像这种需要多个变化的背景,用layer-list就可以很方便的解决,不需要设计出图,有利于减小安装包的大小。
color-list
作用和用法类似于state-list,格式为:<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:color="hex_color" android:state_pressed=["true" | "false"] android:state_focused=["true" | "false"] android:state_selected=["true" | "false"] android:state_checkable=["true" | "false"] android:state_checked=["true" | "false"] android:state_enabled=["true" | "false"] android:state_window_focused=["true" | "false"] /> </selector>
基本上只是把
item里面的
drawable改为了
color。与state-list最大的区别就是,state-list得到的是
drawable资源文件,而color-list得到的是
color资源文件。可以直接给
textColor使用,这样就可以在点击的时候改变字体颜色。
Transition Drawable
<?xml version="1.0" encoding="utf-8"?> <transition xmlns:android="http://schemas.android.com/apk/res/android" > <item android:drawable="@[package:]drawable/drawable_resource" android:id="@[+][package:]id/resource_name" android:top="dimension" android:right="dimension" android:bottom="dimension" android:left="dimension" /> </transition>
一般是设置两个
item,通过View的方法,获取到
drawable,然后调用
startTrasition(int),
drawable会从第一个
item渐变到第二个
item,但是第一个
item并没有消失,第二个
item的应该是调整
alpha值从0到1。
相关文章推荐
- android textview字体大小设置
- Afinal框架的解析(一)
- android开发之Fragment利用Bundle保存状态
- 使用AsyncTaskLoader获取本地数据(图片)
- android 加密 SQLCipher和Conceal
- android shape的使用
- android下播放器视频输出方法总结
- 版本控制器之-git的简单用法
- android自定义View之刻度尺MnScaleBar
- 支付宝集成获取私钥与公钥
- android CHMOD命令用法
- [Android学习笔记八] 使用VideoView屏幕方向发生变化,视频方向自动切换
- Android异步加载(二)
- android 计算器
- android118 上拉下拉刷新列表listView实现
- Android之下拉列表Spinner控件使用
- android控件的监听绑定方法
- android studio 9.png 报错
- Android Manifest标签之data, grant-uri-permission, instrumentation, intent-filter
- Android并发编程之全方位解析AsyncTask