Android 的 Drawable

Drawable 一般通过XML来定义,常被用来作为View 的背景使用。

Drawable 种类:

1. BitmapDrawable 

它就表示一张图片

<?xml version="1.0" encoding="utf-8"?>
<bitmap 
    xmlns:android="http://schemas.android.com/apk/res/android"  
    android:src="@drawable/ic_launcher_background"
    android:antialias="true"
    android:dither="true"
    android:gravity="center"
    android:mipMap="false"
    android:tileMode="disabled"
    android:filter="true">
</bitmap>

android:src  图片资源;

android:antialias  是否开启图片抗锯齿;

android:dither  是否开启抖动效果。当图片的像素和手机屏幕的像素匹配不一直时,开启可以让高质量的图片在低质量的屏幕上保持较好的效果;

android:gravity  当图片小于容器尺寸时,可以对图片进行定位;

android:mipMap  纹理映射,默认false,在日常开发中不常用;

android:tileMode  平铺模式,开启平铺模式后 gravity 属性会被忽略;

android:filter  是否开启过滤效果,当图片被拉伸或压缩时,开启可以保持较好的显示效果;

2.ShapeDrawable

通过颜色来构造的图形,它既可以是纯色也可以是渐变效果;

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <corners
        android:radius="5dp"
        android:topLeftRadius="5dp"
        android:topRightRadius="5dp"
        android:bottomLeftRadius="5dp"
        android:bottomRightRadius="5dp"/>
    <gradient
        android:angle="5dp"
        android:centerX="5dp"
        android:centerY="5dp"
        android:centerColor="@color/colorAccent"
        android:startColor="@color/colorAccent"
        android:endColor="@color/colorAccent"
        android:gradientRadius="5dp"
        android:type="linear"
        android:useLevel="true"
        />
    <padding
        
        />
    <size
        android:width="5dp"
        android:height="5dp"
        />
    <solid
        android:color="@color/colorAccent"
        />
    <stroke
        android:width="5dp"
        android:color="@color/colorAccent"
        android:dashWidth="5dp"
        android:dashGap="5dp"
        />
</shape>

android:shape  表示图形形状,rectangle(矩形)、oval(椭圆)、line(横线)、ring(圆环)

 

<corners/>   表示shape的四个角度,它只适用于矩形shape;

android:radius  四个角同时设为相同角度,优先级较低,会被其他四个属性覆盖;

android:topLeftRadius  左上角;

android: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:type  渐变的类型,linear(线性渐变)、radial(径向渐变)、sweep(扫描线渐变)

android:useLevel  一般为false,当Drawable作为StateDrawable使用时为true;

 

<solid/>  纯色填充,通过android:color设置颜色;

 

<stroke/>  shape的描边;

android:width  描边的宽;

android:color  描边颜色;

android:dashWidth  组成虚线的线段宽;

android:dashGap  组成虚线的线段之间的间隔;

 

<size/>  表示shape的大小;

3.LayerDrawable

LayerDrawable 对应 <layer-list> 标签,他表示一种层次化的Drawable的集合;

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:drawable="@drawable/ic_launcher_background"
        android:id="@+id/test"
        android:top="5dp"
        android:right="5dp"
        android:left="5dp"
        android:bottom="5dp"/>
</layer-list>

一个<layer-list>可以包含多个item,每个item表示一个Drawable,item常用的属性分别表示Drawable相对View的距离,layer-list有层次的概念,下面的item会覆盖上面的item;

4.StateListDrawable

StateListDrawable 对应 <selector> 标签,他也表示Drawable的集合,每个Drawable都对应这View的一种状态,主要用于设置可单击的View背景;

<?xml version="1.0" encoding="utf-8"?>
<selector
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:constantSize="true"
    android:dither="true"
    android:variablePadding="true"
    >
    <item
        android:state_pressed="true"
        android:state_focused="true"
        android:state_selected="true"
        android:state_checked="true"
        android:state_enabled="true"/>
</selector>

android:constantSize  true表示StateListDrawable的固有大小保持不变,false表示StateListDrawable会随状态改变而改变,默认为false;

android:dither  是否开启抖动;

android:variablePadding  StateListDrawable的padding是否随状态而改变,true 会、false不会,默认false;

常见状态:pressed(按下未松开)、focused(View已焦点)、selected(选择了View)

5.LevelListDrawable

LevelListDrawable 对应 <level-list> 标签,同样表示Drawable的集合,集合中每个Drawable 都有一个level,根据不同level,LevelListDrawable 会切换对应的Drawable;

<?xml version="1.0" encoding="utf-8"?>
<level-list 
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:drawable="@drawable/ic_launcher_background"
        android:maxLevel="4"
        android:minLevel="1"/>
</level-list>

每个item表示一个Drawable,并有对应的等级范围,当它作为View背景时,可以通过Drawable的setLevel方法设置不同等级所切换的Drawable,Drawable的等级范围:0~10000,默认为0;

6.TransitionDrawable

TransitionDrawable 对应 <transition>标签,用于实现两个Drawable间的淡入淡出效果(动画过度)

<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:drawable="@drawable/ic_launcher_background"
        android:id="@+id/test"
        android:top="5dp"
        android:right="5dp"
        android:left="5dp"
        android:bottom="5dp"/>
</transition>

将TransitionDrawable 设置为View的背景,通过它的startTransition 和reverseTransition 方法来实现淡入淡出;

TransitionDrawable drawable = (TransitionDrawable)TextView.getBackground();
drawable.startTransition(1000);

7.InsetDrawable

InsetDrawable 对应 <inset>,它可以将其他的Drawable内嵌到自己当中,并留出一定距离;

<?xml version="1.0" encoding="utf-8"?>
<inset 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/ic_launcher_background"
    android:insetTop="5dp"
    android:insetRight="5dp"
    android:insetLeft="5dp"
    android:insetBottom="5dp">
</inset>

8.ScaleDrawable

ScaleDrawable对应 <scale> 标签,可以将指定的Drawable 缩放一定比例;

<?xml version="1.0" encoding="utf-8"?>
<scale 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/ic_launcher_background"
    android:scaleGravity="center"
    android:scaleHeight="25%"
    android:scaleWidth="25%"
    >
</scale>

android:scaleGravity  与shape中 android:gravity 相同;

android:scaleHeight  与 android:scaleWidth  指定Drawable 高和宽缩放的比例  如:50%;

9.ClipDrawable

ClipDrawable 对应 <clip> 标签,可以用来裁剪Drawable;

<?xml version="1.0" encoding="utf-8"?>
<clip 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/ic_launcher_background"
    android:clipOrientation="horizontal"
    android:gravity="center"
    >
</clip>

android:clipOrientation  裁剪方向(水平/竖直)

android:gravity  在容器中放置的位置;

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值