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表示不裁剪

0 0
原创粉丝点击