从新学习一下Drawable

ShapeDrawable
ShapeDrawable对于Xml的shape标签,在实际开发中我们经常将其作为背景图片使用,因为ShapeDrawable可以帮助我们通过颜色来构造图片,也可以构造渐变效果的图片,总之,ShapeDrawable足矣满足我们大部分特殊需求下面我们说说其使用方法:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape=["rectangle 矩形" | "oval 椭圆" | "line 横线"| "ring 圆环"]>

    //指定边角的半径,数值越大角越圆,数值越小越趋近于直角, 参数如下:
    //Android:radius直接指定4个角的半径,另外4个属性可以单独设置4个角的角度.
   <corners
        android: radius="int"  边角的半径
        android: topLeftRadius="int"
        android: topRightRadius="int"
        android: bottomLeftRadius="int"
        android: bottomRightRadius="int" />

    //设置颜色渐变与"solid"为互斥标签,因为solid表示纯色填充,而gradient表示渐变填充。
   <gradient
       android:angle="integer"  渐变的角度,默认为0,其值务必为45°的倍数,0表示从左到右,90表示从下到上。
       android:centerX="integer"   渐变中心点的横坐标
       android:centerY="integer"   渐变的中心点的纵坐标,渐变中心点会影响渐变的具体效果。
       android:startColor="integer"渐变的开始颜色
       android:centerColor="integer"渐变的中间颜色
       android:endColor="color"     渐变的结束颜色
       android:gradientRadius="integer" 渐变的半径,当android:type=”radial”有效
       android:type=["linear (线性)为默认值 " | "radial (径内渐变)" | "sweep (扫描渐变)"]  渐变类别
       android:usesLevel=["true" | "false"]  一般为false />

    //表示内容与子标签边距,4个属性top、bottom、left、right,需要注意的是这个标签的作用是为内容设置与当前应用此shape的View的边距,而不是设置当前View与父元素的边距。
    <padding
        android:left="integer"
        android:top="integer"
        android:right="integer"
        android:bottom="integer" />

    //设置背景大小,width和height俩属性。一般来说这个值不是shape的最终显示大小,
    //因为shape作为背景时会根据View的大小而填充其背景,因此Shape的大小很多时候是View的大小决定的。
    <size
        android:width="integer"
        android:height="integer" />

    //表示纯色填充,通过android:color设置颜色即可。
    <solid
        android:color="color" />

    //描述边框(有点要明白的是android:dashWidth和android:dashGap有任意一个为0,则虚线无法预期显示)
    <stroke
        android:width="integer"  描述边框的宽度,数值越大,越边框越厚
        android:color="color" 边框的颜色
        android:dashWidth="integer" 组成虚线的线段宽度
        android:dashGap="integer" /> 组成虚线的线段之间的间隔,间隔越大,虚线看起的间隙就越大

    </shape>
LayerDrawable
一个LayerDrawable是一个可以管理一组drawable对象的drawable。在LayerDrawable的drawable资源按照列表的顺序绘制,列表的最后一个drawable绘制在最上层。LayerDrawable对于xml的标签是<layer-list>其语法如下:
<?xml version="1.0" encoding="utf-8"?>
<layer-list  xmlns:android="http://schemas.android.com/apk/res/android" >
    //一个layer-list可以包含多个item,而每个item则表示一个Drawable。
    <item
        android:drawable="@[package:]drawable/drawable_resource" //Drawable资源,可以引用已有的drawable资源,也可在item中自定义Drawable。默认情况下,layer-list中的Drawable都会被缩放至View的大小,因此在必要的情况下,我们可以使用android:gravity属性来控制图片的展示效果,防止图片变形或者被过度拉伸。
        android:id="@[+][package:]id/resource_name" //资源ID,一个为这个item定义的唯一的资源ID。 使用:”@+id/name”.这样的方式。可以检索或修改这个drawable通过下面的方式:View.findViewById() or Activity.findViewById().
        android:top="Integer"       //Drawable相对于View的顶部的偏移量,单位像素
        android:right="Integer"     //Drawable相对于View的右边的偏移量,单位像素
        android:bottom="Integer"    //Drawable相对于View的底部的偏移量,单位像素
        android:left="Integer" >   //Drawable相对于View的左边的偏移量,单位像素

            <shape android:shape="rectangle">
                 ......一些属性....
                <solid android:color="@color/colorAccent" />
                 ......等等.....
            </shape>
    <item/>
</layer-list

StateListDrawable
StateListDrawable对于xml的<selector>标签,这个标签可以说是我们最常用的标签了,在开发中,有时候我们需要一个View在点击前显示某种状态,而在点击后又切换到另外一种状态,这时我们就需要利用<selector>标签来实现啦。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
    android:constantSize=["true" | "false"] //StateListDrawable的固有大小是否随着其状态改变而改变,因为在状态改变后,StateListDrawable会切换到别的Drawable,而不同的Drawable其大小可能不一样。true表示大小不变,这时其固有大小是内容所有Drawable的固有大小的最大值。false则会随着状态改变而改变,默认值为false
    android:dither=["true" | "false"] //是否开启抖动效果,开启后可使高质量的图片在低质量的屏幕上仍然有较好的显示效果,一般建议开启,设置为true。
    android:variablePadding=["true" | "false"] //表示 StateListDrawable的padding是否随状态的改变而改变,默认值为false,一般建议设置为false就行。 >
        <item
            android:drawable="@[package:]drawable/drawable_resource" //该状态下要显示的图像,可以是Drawable也可以是图片
            android:state_pressed=["true" | "false"]  //表示是否处于被按下状态
            android:state_focused=["true" | "false"]  //表示是否已得到焦点状态
            android:state_hovered=["true" | "false"]  //表示光标是否停留在View的自身大小范围内的状态
            android:state_selected=["true" | "false"] //表示是否处于被选中状态
            android:state_checkable=["true" | "false"]//表示是否处于可勾选状态
            android:state_checked=["true" | "false"]  //表示是否处于已勾选状态,一般用于CheckBox
            android:state_enabled=["true" | "false"]  //表示是否处于可用状态
            android:state_activated=["true" | "false"]//表示是否处于激活状态
            android:state_window_focused=["true" | "false"]//表示是否窗口已得到焦点状态
        </item>
</selector>
LevelListDrawable

LevelListDrawable对应于<level-list>标签,也表示一个Drawable的集合但集合中的每个Drawable都有一个等级。根据不同等级,LevelListDrawable会切换到相应的Drawable。

<?xml version="1.0" encoding="utf-8"?>
<level-list
    xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:drawable="@drawable/drawable_resource" //该等级下需要展示的图片
        android:maxLevel="integer" //该项所允许的最大level
        android:minLevel="integer" //该项所允许的最小level>
    </item>

    <item  android:drawable="@drawable/image1"
            android:maxLevel="1" />

    <item  android:drawable="@drawable/image2"
           android:maxLevel="2" />
</level-list>
BitmapDrawable

BitmapDrawable 是对bitmap的一种包装,可以设置它包装的bitmap在BitmapDrawable区域内的绘制方式,如平铺填充、拉伸填充或者保持图片原始大小,也可以在BitmapDrawable区域内部使用gravity指定的对齐方式。

<?xml version="1.0" encoding="utf-8"?>
<bitmap
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@[package:]drawable/drawable_resource"  //Drawable resource。必需。 引用一个drawable resource.
    android:antialias=["true" | "false"] //是否开启抗锯齿。开启后图片会变得更平滑些,因此一般建议开启,设置为true即可。
    android:dither=["true" | "false"]//是否允许抖动,如果位图与屏幕的像素配置不同时,开启这个选项可以让高质量的图片在低质量的屏幕上保持较好的显示效果(例如:一个位图的像素设置是 ARGB 8888,但屏幕的设置是RGB 565,开启这个选项可以是图片不过于失真)一般建议开启,为true即可。
    android:filter=["true" | "false"]//是否允许对位图进行滤波。当图片被压缩或者拉伸时,使用滤波可以获得平滑的外观效果。一般建议开启,为true即可
    android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |"fill_vertical" | "center_horizontal" | "fill_horizontal" |"center" | "fill" | "clip_vertical" | "clip_horizontal"]
    android:tileMode=["disabled" | "clamp" | "repeat" | "mirror"]    //平铺模式。共有以下几个值
                                                                     disabled :默认值,表示不使用平铺
                                                                     clamp :复制边缘色彩
                                                                     repeat :X、Y 轴进行重复图片显示,也就是我们说要说的平铺
                                                                     mirror :在水平和垂直方向上使用交替镜像的方式重复图片的绘制
    />



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值