Drawable使用

Drawable是一个抽象类,是对可绘制物件的抽象。与View不同,Drawable没有事件和交互方法。
Drawable有好多子类操作具体类型资源,比如
BitmapDrawable是用来操作位图
ColorDrawable是用来操作颜色
ClipDrawable是用来操作剪切板

Drawable原理

  • draw(Canvas canvas)
  • setBounds()

BitmapDrawable

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

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/background"
    android:tileMode="mirror"
    android:antialias="true"
    android:dither="true">

</bitmap>

在布局文件中通过android:background="@drawable/xxx"引用

LayerDrawable

LayerDrawable可以管理一组drawable对象,在LayerDrawabledrawable资源按照列表的顺序绘制,列表的最后一个drawable绘制在最上层。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:drawable="@drawable/background"
        android:gravity="center"
        android:left="20dp"
        android:top="20dp" />
    <item
        android:drawable="@drawable/avatar"
        android:gravity="center"
        android:left="20dp"
        android:top="20dp" />

</layer-list>

StateListDrawable

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

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_focused="true"
        android:drawable="@drawable/avatar1"/>
 	<item
        android:state_pressed="true"
        android:drawable="@drawable/avatar2"/>
	<item
        android:state_selected="true"
        android:drawable="@drawable/avatar3"/>
	<item
        android:drawable="@drawable/avatar_default"/>
</selector>
LevelListDrawable

LevelListDrawable管理一组drawable资源
LevelListDrawable里面的每一个drawable资源与一个最大数值结合起来,作为LevelListDrawable资源的一项。
调用DrawablesetLevel()方法可以加载level-list或代码中定义的某个drawable资源。

<level-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/background"
        android:minLevel="6"
        android:maxLevel="10"/>
    <item android:drawable="@drawable/background"
        android:minLevel="12"
        android:maxLevel="16"/>
</level-list>

setImageLevel()方法设置当前的level

TransitionDrawable

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

<transition xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/background1"/>
    <item android:drawable="@drawable/background2"/>
</transition>
InsetDrawable

InsetDrawable 表示一个drawable嵌入到另外一个drawable内部,并且在内部留一些间距,这一点很像drawablepadding属性

<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/background"
    android:inset="50dp">

</inset>
ClipDrawable

ClipDrawable是对Drawable进行剪切操作,控制剪切区域
setLevel(int level)方法来设置剪切区域;level取值0~10000,0表示完全不显示,10000表示全部显示。

<clip xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/background"
    android:clipOrientation="vertical"
    android:gravity="center">

</clip>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值