Android Drawable种类

Android Drawable

  Drawable是一个抽象类,是对可绘制物体的抽象,与View不同的是Drawable没有事件和交互方法。Drawable是看不见得,不能为它添加点击事件。
  

BitmapDrawable

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

  在drawable下新建bitmap.xml 

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:antialias="true"
    android:dither="true"
    android:src="@mipmap/ic_launcher"
    android:tileMode="mirror"> //镜像平铺
</bitmap>

LayerDrawable

  可以管理一组Drawable对象,可以按顺序绘制,列表的最后一个drawable绘制在最上层。
  
如下,两张图片绘制,ic_launcher在test之上。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:gravity="center"
        android:left="20dp">
        <bitmap
            android:gravity="center"
            android:src="@mipmap/test" />
    </item>

    <item
        android:gravity="center"
        android:left="20dp">
        <bitmap
            android:gravity="center"
            android:src="@mipmap/ic_launcher" />
    </item>
</layer-list>

stateListDrawable

在一个xml文件中进行定义,可以根据不同的状态提供不同的背景。比如,一个按钮的多种状态,获取焦点,失去焦点和点击时背景的不同。  

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/bg_blue_button_normal"/>
    <item android:drawable="@drawable/bg_blue_button_click" android:state_pressed="true"/>
</selector>

LevelListDrawable

一个LeveListDrawable管理着一组交替的drawable资源。LeveListDrawable里面的每一个drawable资源与一个最大数值结合起来,作为LevelListDrawable资源的一项。

调用Drawable的setLevel()方法可以加载level-list或代码中定义的某个drawable资源,判断加载某项的方式:level-list中某项的Android:maxLevel数值大于或者等于setLevel设置的数值,就会被加载。

比如一个电灯开启关闭:

<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:drawable="@drawable/lamp_off"
        android:maxLevel="10"
        android:minLevel="6"/>
    <item
        android:drawable="@drawable/lamp_on"
        android:maxLevel="18"
        android:minLevel="12" />

</level-list>

setLevel()在6至10,灯灭,在12至18,灯亮

TransitionDrawable

是LeveListDrawable的子类,只负责管理两层drawable,并且提供了一个透明度变化的动画,可以控制从一层drawable过度到另外一层drawable的动画效果

<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:drawable="@drawable/lamp_off"/>
    <item
        android:drawable="@drawable/lamp_on"/>

</transition>
TransitionDrawable drawable = (TransitionDrawable) iv.getDrawable();
drawable.startTransition(1000);

InsetDrawable

表示一个drawable嵌入到另外一个drawable内部,并在内部留一些间距,很像drawable的Padding属性

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

ClipDrawable

  1. 对Drawable进行剪切操作,控制剪切区域。
  2. android中的进度条就是使用一个ClipDrawable实现效果的
  3. 通过setLevle(int level)来设置裁剪区域,0为完全不显示,10000完全显示。
<?xml version="1.0" encoding="utf-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android"
    android:clipOrientation="horizontal"
    android:drawable="@mipmap/test"
    android:gravity="left"> 
</clip>

RippleDrawable

就是一个自定义触摸反馈动画。是在 Android 5.0 时推出的动画效果。

<?xml version="1.0" encoding="utf-8"?>  
<ripple xmlns:android="http://schemas.android.com/apk/res/android"  
    android:color="#0CC">  
    <!--显示默认的 drawable-->  
    <item android:drawable="@drawable/button_default" />  

    <!--匹配默认值的波纹效果剪切遮罩-->  
    <item  
        android:id="@android:id/mask"  
        android:drawable="@drawable/button_default" />  
</ripple> 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值