Android Drawable

Drawable表示一种可以在Canvas上进行绘制的抽象概念

一种图像的概念,一般用XML定义,也可以用代码定义

 

BitmapDrawable(重要)

<bitmap>标签

示例代码:

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

android:src图片资源ID

android:antialias是否开启图片抗齿距(让图片平滑但降低了清晰度)

android:dither是否开启抖动效果(让高质量图片在低质量屏幕上展现较好的效果)

android:filter是否开启过滤效果(图片拉伸或压缩时展现较好效果)

android:gravity定位

android:mipMap纹理映射

android:tileMode平铺模式

 

NinePatchDrawable

.9格式图片,用<nine_patch>标签表示

 

ShapeDrawable(重点)

通过颜色构造的图形,非常的常用,<shape>标签

示例代码

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <!--设置背景色-->
    <solid android:color="#ffffff"/>
    <!--设置圆角-->
    <corners android:radius="2dp"/>
    <!--设置边框线的宽度和颜色-->
    <stroke android:width="1dp" android:color="#5454F0" />
</shape>

android:shape形状:rectangle矩形,oval椭圆,line线形,ring圆形

android:innerRadius圆环内半径android:thickness圆环厚度

<corners>圆角

<gradient>渐变颜色填充

<solid>纯色填充

<stroke>描边

<padding>包含它的view的空白

<size>固有宽高,但不是最终显示,使用时还是会被拉伸或缩小为View的大小

 

LayerDrawable(重要)

层次化的Drawable集合,<layer-list>标签+<item>标签

一个layer-list可以有多个item,每个item表示一个Drawable,下面的item会覆盖上面的item

示例代码:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="#0ac39e"/>
        </shape>
    </item>
    <item android:bottom="6dp">
        <shape android:shape="rectangle">
            <solid android:color="#ffffff"/>
        </shape>
    </item>
    <item android:bottom="1dp" android:left="1dp" android:right="1dp">
        <shape android:shape="rectangle">
            <solid android:color="#ffffff"/>
        </shape>
    </item>
</layer-list>

<item>属性android:left,android:right,android:top,android:bottom分别表示相对于View的位置偏移量

android:id,android:drawable可以引用一个已有的Drawable

 

StateListDrawable(重要)

也是一种Drawable的集合,每个Drawable对应View的一种状态,<selector>标签

示例代码:

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

<selector>标签属性android:constantSize固有宽高是否随状态切换而改变android:variable,padding是否随状态切换而改变

<item>标签属性android:state_pressed按下状态,android:state_focused已经获取焦点状态,android:state_selected已经选择状态,

android:state_checked选中状态,android:state_enabled可用状态

 

LevelListDrawable

也是一种Drawable的集合,每个Drawable对应一个Level,<Level-list>标签

<item>设置android:maxLevel,android:minLevel

Level范围为0-10000

通过Drawable的setLevel或者控件的setXXXLevel来设置等级

 

TransitionDrawable

实现两个Drawable的淡入淡出效果,<transition>标签

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

然后可以通过startTransiton()等方法来进行操作

 

InsetDrawable

将其他Drawable内嵌入自己并留出一定间距,<inset>标签

用于View希望背景小于自己实际大小的时候使用

<inset>标签属性:android:insetLeft,android:insetRight,android:insetTop,android:insetBottom

 

ScaleDrawable

根据自己的Level将指定的Drawable进行缩放,<scale>标签

android:scaleHeight,android:scaleWidth,android:scaleGravity

 

ClipDrawable

根据自己的Level将指定的Drawable进行剪裁,<clip>标签

android:clipOrientation,android:gravity

 

自定义Drawable

代码实现,public class CustomDrawable extend Drawable

覆写方法:

draw,setAlpha,setColorFilter,getOpacity

 

一个重要概念,Drawable固有大小不等于实际大小,使用时还是会被拉伸或缩小为View的大小

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值