Android 的Drawable
来源:互联网 发布:淘宝网店培训视频 编辑:程序博客网 时间:2024/05/20 01:12
Drawable表示的是一种可以在Canvas上进行绘制的抽象的概念,它的种类很多,最常见的颜色和图片都可以是一个Drawable。
Drawable一般是通过xml定义,但是也可以通过代码创建具体的Drawabl对象.
Drawable的内部宽/高参数比较重要,通过 getIntrinsicWidth 和 getIntrinsicHeight 这两个犯法可以获取到它们,但是,不是所有的Drawable都有内部宽/高。比如图片形成的Drawable的内部宽高,就是图片的宽高,但是颜色形成的Drawable它就没有内部宽高的概念。
BitmapDrawable
<?xml version="1.0" encoding="utf-8"?><bitmap android:src="@drawable/ic_check" android:antialias="true" android:dither="true" android:filter="true" android:gravity="center" android:tileMode="clamp" xmlns:android="http://schemas.android.com/apk/res/android" />
- android:src : 图片的资源 id
- android:antialias : 是否开启图片抗锯齿功能
- android:dither : 是否开启抖动效果
- android:filter : 是否开启过滤效果
- android:gravity : 当图片小于容器的尺寸时,设置此选项可以对图片进行定位
- android:mipMap : 纹理映射,一般不用,默认为 false
- android:tileMode : 平铺模式,主要有以下几个值,开启平铺模式后gravity属性会被忽略
disable: 关闭平铺模式,默认值
repeat: 水平和竖直方向的平铺
mirror: 水平和竖直方向上的镜面投影效果
clamp: 四周像素扩展到周围
NinePatchDrawable
<nine-patch android:src="@drawable/ic_check" android:dither="true" xmlns:android="http://schemas.android.com/apk/res/android"/>
表示的是一张.9格式的图片
ShapeDrawable
<?xml version="1.0" encoding="utf-8"?><shape android:shape="rectangle" xmlns:android="http://schemas.android.com/apk/res/android"> <corners android:radius="1dp" android:topLeftRadius="1dp" android:topRightRadius="1dp" android:bottomLeftRadius="1dp" android:bottomRightRadius="1dp" /> <gradient android:angle="10" android:centerX="1" android:centerY="1" android:centerColor="@color/divider_grey" android:endColor="@color/black_button" android:gradientRadius="1" android:startColor="@color/orange_button" android:type="linear" android:useLevel="true" /> <padding android:left="1dp" android:top="1dp" android:right="1dp" android:bottom="1dp"/> <size android:width="20dp" android:height="20dp"/> <solid android:color="@color/cardview_shadow_end_color"/> <stroke android:width="1dp" android:color="@color/description_color" android:dashWidth="1dp" android:dashGap="1dp"/> </shape>
shape:
- android:shape : 表示图形的形状,有四种选项 rectangle(矩形),oval(椭圆),line(直线),ring(圆环),默认为矩形,line和ring必须通过标签指定线的宽度和颜色
corners:用于表示shape的四个角的圆角的程度,用px表示
- android:radius : 为四个角同时设置形同的角度
- android:topLeftRadius : 左上角角度
- andorid:topRightRadius : 右上角角度
- android:bottomLeftRadius : 左下角角度
- android:bottomRightRadius : 右下角角度
gradient: 与solid标签互斥,solid表示纯色填充,gradient表示渐变效果,
- android:angle : 渐变的角度,默认为0,值必须是45的倍数,0表示从左到右,90从下到上
- android:centerX : 渐变的中心点的横坐标
- android:centerY :渐变的中心点的纵坐标
- android:startColor : 渐变的起始色
- android:centerColor : 渐变的中间色
- android:endColor : 渐变的结果色
- android:gradientRadius : 渐变半径,仅当 *android:type=”radial”*时有效
- android:useLevel : 一般为false,当Drawable作为StateListDrawable时为true
- android:type : 渐变的类别,有 linear(线性渐变),radial(径向渐变),sweep(扫描线渐变)
solid: 纯色填充
:shape的描边
- android:width : 描边宽度
- android:color : 描边颜色
- android:dashWidth : 组成虚线的线段宽度
- android:dashGap : 组成虚线的线段之间的间隔
padding:空白
size :shape的大小,表示的是固有大小,但是不一定是最终显示大小
LayerDrawable
<?xml version="1.0" encoding="utf-8"?><layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/ic_check" android:top="1dp" android:left="1dp" android:right="1dp" android:bottom="1dp"/></layer-list>
表示的是一种层次化的Drawable集合,通过不同的Drawable放置在不同的层面上从而达到一种叠加后的效果,一个layer-list中可以包含多个item,默认情况下layer-list中的所有Drawable都会缩放到View的大小
StateListDrawable
<?xml version="1.0" encoding="utf-8"?><selector android:constantSize="true" android:dither="true" android:variablePadding="true" xmlns:android="http://schemas.android.com/apk/res/android" > <item android:drawable="@drawable/ic_check" android:state_pressed="true" android:state_focused="true" android:state_hovered="true" android:state_selected="true" android:state_checkable="true" android:state_checked="true" android:state_enabled="true" android:state_activated="true" android:state_window_focused="true" /> <item android:drawable="#ffaaff"/></selector>
对应于selector标签,它也是Drawable集合,每个item对应这view的一种状态,这样系统机会根据view的状态来选择Drawable,主要用于可单击的view背景,最常见的是button
- android:constantSize : StateListDrawable 的固有大小是否随着状态的改变而改变
- andorid:dither : 是否开启抖动效果
- andorid:variablePadding : StateListDrawable 的padding是否根据状态的改变而改变
系统会根据view的当前状态从selector中选择对应的item,每个itme对应着一个Drawable,系统从上至下匹配,直到找到第一个匹配的item,一般来说,默认的item应该放在selector的最后一条并且不附带任何状态
LeverListDrawable
<?xml version="1.0" encoding="utf-8"?><level-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/ic_check" android:maxLevel="5" android:minLevel="1"></item></level-list>
LeverListDrawable表示一个Drawable集合,集合中的每个Drawable都有一个等级的概念,根据不同的等级,LeverListDrawable会切换对应的Drawable,可以通过Drawable的setLevel方法来设置不同的等级从而切换具体的Drawable
TransitionDrawable
<?xml version="1.0" encoding="utf-8"?><transition xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/ic_check" android:id="@+id/its" android:top="1dp" android:right="1dp" android:left="1dp" android:bottom="1dp"/> <item android:drawable="#ffaacc"/></transition>
用于实现两个Drawable之间的淡入淡出效果,可以通过它的 startTransition,和reverseTransition来实现淡入淡出的效果以及它的逆过程
Button unlockButton=(Button)findViewById(R.id.unlock); TransitionDrawable drawable=(TransitionDrawable)unlockButton.getBackground(); drawable.startTransition(1000);
InsetDrawable
InsetDrawable 对应于 inset 标签,它可以将其它的Drawable内嵌到自己当中,并可以在四周留出一段距离
ScaleDrawable
ScaleDrawable 对应于 scale标签,它可以根据自己的等级将指定的Drawable缩放到一定比例
<?xml version="1.0" encoding="utf-8"?><scale android:drawable="@drawable/ic_check" android:scaleGravity="center" android:scaleHeight="25%" android:scaleWidth="25%" xmlns:android="http://schemas.android.com/apk/res/android" />
- scaleWidth : 缩放宽比例
- scaleHeight :缩放高比例
ClipDrawable
<?xml version="1.0" encoding="utf-8"?><clip android:drawable="@drawable/ic_check" android:clipOrientation="vertical" android:gravity="center" xmlns:android="http://schemas.android.com/apk/res/android" />
ClipDrawable 对应于标签clip,它可以根据自己当前的等级来裁剪Drawable,clipOrientation 表示裁剪方向
Button unlockButton=(Button)findViewById(R.id.unlock); ClipDrawable drawable=(ClipDrawable)unlockButton.getBackground(); drawable.setLevel(1);
Drawable的等级有范围的,0~10000,最小等级是0,最大等级是10000,对于ClipDrawable来说,等级0表示完全裁剪,等级1000表示不裁剪
- android的Drawable
- android的Drawable资源
- android 的Drawable
- Android 的Drawable
- Android的Drawable
- Android的Drawable
- Android的Drawable体系
- Android的各种Drawable
- android的Drawable详解
- android的Drawable详解
- Android的Drawable
- Android各种各样的drawable
- Android的Drawable
- Android的Drawable
- Android的Drawable
- android res目录下drawable、drawable-ldpi、drawable-mdpi、drawable-hdpi、drawable-xhdpi、drawable-xxhdpi的使用方法
- android中drawable的分类
- Android Drawable资源的使用
- Android 实现点击两次BACK键退出应用
- QT学习二:工具栏
- cocos2dx事件分发机制与lambda表达式浅谈
- 人物简介——奥古斯塔·德摩根
- 我就是试试Java中的Socket
- Android 的Drawable
- SWTableViewCell——一个和iOS 7的系统Mail类似,使用起来简单的UITableViewCell子类
- 使用ViewDragHelper来现实自定义DrawerLayout
- 文件夹打不开的几种处理方法
- 备忘录模式
- 配置文件格式的选择
- 新装myeclipse后的一系列设置汇总
- Android中常出现的内存泄漏情况分析
- bzoj1031 字符加密Cipher