Android资源之Drawable介绍(一)

 在Android开发中,资源文件是我们最熟悉和最需要的重要部分。Drawable作为资源的一种,更是项目中必备的资源。
 Android中的Drawable资源有很多种,诸如LayerDrawable,LevelListDrawble等,可以用来实现不同的效果,从而达到我们要实现的效果。

–BitmapDrawable——–
BitmapDrawable是对Bitmap的一种包装,可以通过平铺填充,拉伸填充等方式来绘制或处理图片。实现方法在res/drawable文件下定义对应xml文件,如drawable.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:filter="true"
    android:gravity="bottom"
    android:src="@mipmap/ic_launcher"></bitmap>
    <!-- 
    android:antialias——开启或关闭抗锯齿
    android:dither——开启或关闭图像抖动
    android:filter——开启或关闭滤镜。
    android:gravity——当位图大小比它所在的容器小的时候,使用这个属性来决定位    图在容器中的位置。 可取的值有:top、bottom、left、right、enter_vertical、fill_vertical(纵向缩放位图使之与容器等高)、    center_horizontal、fill_horizontal(横向缩放位图使之与容器等宽)、center、    fill(纵向与橫向都缩放使之完全铺满容器,这也是默认值)等
    android:tileMode——定义平铺模式。如果定义了,那么位图将会重复,并且Gravity属性将失效。 可取的值有disabled(默认值,不启用平铺)、clamp(复制位图边缘的颜色来填充容器剩下的空白部分)、
    repeat(复制整个位图来填充容器)、mirror(与repeat类似,但是是交替的镜像复制,即相邻的两张是镜像对称的)-->

—LayerDrawable——-
LayerDrawable可以管理一组或一系列Drawable资源并按照列表的顺序绘制,列表的最后一个Drawable显示(绘制)在最上面。实现方法在res/drawable文件下定义对应xml文件,如layer_drawable.xml:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:drawable="@mipmap/test_01"
        android:gravity="center"
        android:left="50dp"
        android:top="50dp" />
    <item
        android:drawable="@mipmap/test_02"
        android:gravity="center"
        android:left="60dp"
        android:top="60dp" />
</layer-list>
<!-- 
    android:drawable——Drawable资源,必须项,引用的drawable资源
    android:id——为这个item定义的唯一的资源ID。 使用:"@+id/name".这样的方 式。可以检索或修改这个drawable
    android:top——与top的距离,单位像素
    android:right——与right的距离,单位像素
    android:bottom——与bottom的距离,单位像素
    android:left——与left的距离,单位像素-->

–LevelListDrawable——–
LeveListDrawable用于处理一些交替的drawable资源。LeveListDrawable里面的每一个drawable资源与一个最大数值结合起来,作为LevelListDrawable资源的一项。
调用Drawable的setLevel()方法可以加载level-list或代码中定义的某个drawable资源,判断加载某项的方式:
level-list中某项的Android:maxLevel数值大于或者等于setLevel设置的数值,就会被加载。实现方法在res/drawable文件下定义对应xml文件,如levellist_drawable.xml:

<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:drawable="@mipmap/test_03"
        android:maxLevel="8"
        android:minLevel="12"></item>
    <item
        android:drawable="@mipmap/test_04"
        android:maxLevel="15"
        android:minLevel="20"></item>
</level-list>
<!--   
    android:drawable——引用一个Drawable资源
    android:maxLevel——该项所允许的最大level。
    android:minLevel——该项所允许的最小level。-->

–StateListDrawable——–
StateListDrawable可以根据不同的状态来显示不同的Drawable效果。就如同我们平时给Button等控件根据是否获取焦点,是否选中等 状态设置不同的背景。实现方法在res/drawable文件下定义对应xml文件,如statelist_drawable.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:drawable="@mipmap/test_05" android:state_checked="true"></item>
        <item android:drawable="@mipmap/test_06" android:state_pressed="true"></item>
        <item android:drawable="@mipmap/test_07" android:state_focused="true"></item>
    </selector>
    <!--
        android:constantSize——Boolean。内部大小(所有状态中最大的那个)改变时是否报道。默认为false
        android:dither——Boolean。位图与屏幕的像素配置不同时,是否允许抖动.
        android:variablePadding——布尔值。默认为false,是否要进行绘图填充。
        android:drawable——指向一个drawable资源
        android:state_pressed——Boolean。是否按下
        android:state_focused——Boolean。是否获得获得焦点
        android:state_hovered——Boolean。鼠标在上面滑动的状态。
        android:state_selected——Boolean。是否选中
        android:state_checkable——Boolean。是否可以被勾选(checkable)。只能用在可以勾选的控件上
        android:state_checked——Boolean。是否被勾选上
        android:state_enabled——Boolean。是否可用
        android:state_activated——Boolean。是否被激活并持久的选择
        ....
           -->
定义好这些Drawable之后,就根我们其它的图片资源一样使用,可以做为控件背景资源等。当然也可以在代码中进行对应的操作。
比如我们要在代码中根据不同情况来显示不同的LevelListDrawable:
  1. 首先在布局文件中添加一个ImageView控件,把上面的levellist_drawable作为ImageView的图片资源写在xml布局中。
  2. 我们就可以在Activity中通过代码对LevelListDrawable进行设置:
//找到控件
ImageView iv=(ImageView)findViewById(R.id.test_iv);
//设置Drawable的Level
iv.setImageLevel(10);//设置Level=10,就会显示test_03对应的图片效果
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值