Android中drawable的使用

android中的Drawable分类有很多,主要有BitmapDrawable、LayerDrawable、StateListDrawable、LevelListDrawable、TransitionDrawable、InsertDrawable、ClipDrawable。
1.BitmapDrawable它表示的就是一张图片,通过src属性引用图片,然后设置图片的绘制方式,例如平铺填充、拉伸填充、保持图片的原始大小。示例如下:
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:antialias="true"
    android:src="@mipmap/ic_launcher"
    android:dither="true"
    android:filter="true"
    android:tileMode="mirror">
</bitmap>

其中android:src引用图片的id,android:tileMode代表使用的平铺模式,android:antialias代表是否开启图片抗锯齿功能,android:dither代表是否开启抖动效果,android:filter代表是否开启过滤效果。

2.LayerDrawable通过将一组drawable放在layerdrawable中按照顺序绘制,从而达到叠加的效果。示例如下:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item 
            android:drawable="@mipmap/ic_launcher" 
            android:gravity="left" 
            android:top="10dp" /> 
    <item 
            android:drawable="@mipmap/ic_launcher" 
            android:gravity="center" 
            android:top="20dp" /> 
</layer-list>

每个item代表一个引用drawable,下面的叠加在上面的,形成叠加效果。你也可以设置drawable的位置、对齐方式等等。

3.StateListDrawable它是通过不同的状态提供不同的背景,例如按钮点击、获取焦点是背景的改变。示例如下:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@mipmap/ic_launcher" 
        android:state_focused="true" 
        android:state_pressed="true" />
</selector>
4.LevelListDrawable也是管理一组drawable的集合,但是它通过设置level等级来显示对应的drawable。示例如下:
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item 
        android:drawable="@mipmap/ic_launcher" 
        android:maxLevel="5" 
        android:minLevel="1" /> 
    <item 
        android:drawable="@mipmap/ic_launcher" 
        android:maxLevel="10" 
        android:minLevel="6" /> 
</level-list>

android:maxLevel与android:minLevel代表最低与最高等级,当你把它作为ImageView的图片时,可以通过ImageView的setImageLevel()方法来设置显示等级,从而显示对应的drawable。

5.TransitionDrawable它是LayerDrawable的子类,主要实现两个Drawable之间淡入淡出的效果动画。示例如下:
<transition xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@mipmap/ic_launcher" />
    <item android:drawable="@mipmap/ic_launcher" />
</transition>
TransitionDrawable transitionDrawable = (TransitionDrawable) view.getDrawable();
        transitionDrawable.startTransition(1000);
        transitionDrawable.reverseTransition(1000);

通过view获取它的TransitionDrawable,然后使用startTransition和reverseTransition实现淡入淡出效果以及它的逆过程。

6.InsertDrawable它将一个drawable插入自己的内部当中,并可以在四周留出间距,很像drawable的padding属性。示例如下:
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@mipmap/ic_launcher"
    android:insetBottom="10dp"
    android:insetLeft="10dp"
    android:insetRight="10dp"
    android:insetTop="10dp">
</inset>

其中android:insetTop属性代表距离顶部的大小,其他同理。

7.ClipDrawable它通过setLevel(int level)方法来剪切drawable,level等级是从0~10000,0为完全不显示,10000为完全显示。
<clip xmlns:android="http://schemas.android.com/apk/res/android"
    android:clipOrientation="horizontal"
    android:drawable="@mipmap/ic_launcher"
    android:gravity="left">
</clip>
ClipDrawable clipDrawable = (ClipDrawable) view.getDrawable();
        clipDrawable.setLevel(1000);

android:clipOrientation设置裁剪方向。通过view获取ClipDrawable然后设置等级,进行裁剪。

如果以上的drawable不能满足你的要求,你也可以自定义drawable,然后在onDraw()方法中绘制你所需要的图形。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值