Android Drawable的那些事儿
来源:互联网 发布:淘宝企业店铺客服电话 编辑:程序博客网 时间:2024/05/22 10:23
来来来,看看 Android Drawable 的那些事儿
Drawable和View区别 ε-(´∀`; )
Drawable是一个抽象类,是对可绘制物件的抽象。
与View不同,Drawable没有时间和交互的方法,而View直接面向用户,可以为其添加事件。
Drawable有很多子类操作类型资源,如下
- BitmapDrawable
- LayerDrawable
- StateListDrawable
- ClipDrawable
- LevelListDrawable
- TransitionDrawable
- InsertDrawable
- ClipDrawable
- ShapeDrawable
- ……
╭( ′• o •′ )╭☞ Drawable原理
draw(Canvas canvas)在其中通过画布进行绘制;
setBounds()指定绘制的边界,通常传入一个矩形的绘制对象对其进行绘制。
1.BitmapDrawable
BitmapDrawable是对bitmap的一种包装,可以设置它所包装的bitmap在BitmapDrawable区域内的绘制方式
包括:平铺、拉伸或者保持原始大小等等
android:tileMode=”mirror” 模式
mirror:镜像
repeat:重复
disable:平铺
clamp:图片四周的像素扩散到周围区域android:antialias=”true” 抗锯齿
- android:dither=”true” 抖动
- android:filter=”true” 过滤(图片拉伸或压缩建议开启过滤)
<?xml version="1.0" encoding="utf-8"?><bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/ic_avatar" android:tileMode="mirror" android:antialias="true" android:dither="true" android:filter="true"></bitmap>
2.LayerDrawable
LayerDrawable管理一组drawable对象在LayerDrawable的绘制顺序,列表最后一个drawable在最上层
<?xml version="1.0" encoding="utf-8"?><layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:left="20dp" android:top="20dp"> <bitmap android:gravity="center" android:src="@drawable/ic_avatar1" </item> <item android:left="20dp" android:top="20dp"> <bitmap android:gravity="center" android:src="@drawable/ic_avatar2" </item></layer-list>
3.StateListDrawable
根据不同、状态提供不同的背景。比如按钮获取失去焦点,点击等。
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_focused="true" android:drawable="@drawable/ic_down"></item> <item android:state_pressed="true" android:drawable="@drawable/ic_select"></item> <item android:state_selected="true" android:drawable="@drawable/ic_select"></item> <item android:drawable="@drawable/ic"></item></selector>
( ´◔‸◔`) 为毛一定要在最后加一个默认的状态?
每个item对应一个具体drawable,系统从上到下进行查找,直到匹配;所以,如果没找到就选择默认的,啊哈哈,留一手。
EditText下边框 android:drawableBottom=”@drawable/selector_edittext_line”
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" > <shape android:shape="rectangle"> <corners android:radius="5dp" /> <solid android:color="@color/deeppink" /> </shape> </item> <item > <shape android:shape="rectangle"> <corners android:radius="5dp" /> <solid android:color="@color/pink" /> </shape> </item></selector>
4.LevelListDrawable
管理一组drawable资源,通过调用setLevel()方法加载listvel-list或代码中定义的某个drawable资源,范围0-10000,够用不?
<?xml version="1.0" encoding="utf-8"?><level-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/ic_on" android:maxLevel="10" android:minLevel="6"> </item> <item android:drawable="@drawable/ic_off" android:maxLevel="20" android:minLevel="12"> </item></level-list>
在代码中设置imageView.setImageLevel(8);
5.TransitionDrawable
为LayerDrawable子类,只管理两层,提供透明度变化,可以控制从一层过度到另一层的动画效果
<?xml version="1.0" encoding="utf-8"?><transition xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/ic_on"></item> <item android:drawable="@drawable/ic_off"></item></transition>
在代码中
TransitionDrawable drawable = (TransitionDrawable)v.getDrawable();drawable.startTransition(3000);// ↓ 变身TransitionDrawable drawable = (TransitionDrawable)v.getDrawable();drawable.reverseTransition(3000); // /渐变时间3s
6.InsertDrawable
嵌入到另一个drawable,可以设置inset内边距
<?xml version="1.0" encoding="utf-8"?><inset xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/ic_avatar" android:inset="50dp"></inset>
7.ClipDrawable
对drawable进行剪切,通过setLevel进行剪切,level从0-10000
裁剪方式 android:clipOrientation=”horizontal”
<?xml version="1.0" encoding="utf-8"?><clip xmlns:android="http://schemas.android.com/apk/res/android" android:clipOrientation="horizontal" android:drawable="@drawable/ic_avatar" android:gravity="left"></clip>
横向显示图片的一半(5000)
ClipDrawable drawable = (ClipDrawable)v.getDrawable();drawable.setLevel(5000);
8.ShapeDrawable
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <corners android:bottomLeftRadius="10dp" android:bottomRightRadius="10dp" android:radius="5dp" android:topLeftRadius="10dp" android:topRightRadius="10dp"/> <gradient android:angle="0" android:centerColor="#cccccc" android:centerX="100" android:centerY="20" android:endColor="#abcdef" android:gradientRadius="100dp" android:startColor="#000000" android:type="linear" android:useLevel="false"/> <solid android:color="#cccccc"/> <stroke android:width="1dp" android:color="#cccccc" android:dashGap="2dp" android:dashWidth="50dp"/></shape>
eg:文字加入边框
<?xml version="1.0" encoding="UTF-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="#ffffff"/> <corners android:radius="5dip"/></shape>
可能以上整理的不太全面,啊哈哈哈,可能还有错误的存在,欢迎指教。(ꈍᴗꈍ)
- Android Drawable的那些事儿
- Android中批处理drawable-xxx目录中图片资源的那些事儿
- android开发那些事儿(二)--Drawable资源
- 关于android的那些事儿@@
- Android 广播的那些事儿
- Android广播的那些事儿
- Android Drawable 那些不为人知的高效用法
- Android Drawable 那些不为人知的高效用法
- Android Drawable 那些不为人知的高效用法
- Android Drawable 那些不为人知的高效用法
- Android Drawable 那些不为人知的高效用法
- Android Drawable 那些不为人知的高效用法
- Android Drawable 那些不为人知的高效用法
- Android Drawable 那些不为人知的高效用法
- Android Drawable 那些不为人知的高效用法
- Android Drawable 那些不为人知的高效用法
- Android Drawable 那些不为人知的高效用法
- Android Drawable 那些不为人知的高效用法
- sscanf函数简介
- 选项卡
- day1
- POJ 1094 拓扑排序(dfs+删边)
- 关于最近自己接触到的几个知识点
- Android Drawable的那些事儿
- Qt使用styleSheet制作XP风格的按钮
- Linux shell 学习(四)——case
- 【转】多玩专访郭炜炜 —— 我与西山居,我与剑侠情缘
- Retrofit请求,返回response时报错
- 深度优先搜索(DFS)
- java 知识点(中)
- 什么是原语?
- Rxjava Subject分析