Android Drawable之LayerDrawable

本文详细介绍了Android中的LayerDrawable组件,包括其基本概念、XML文件及代码创建方式,并提供了实例说明。
Overview

一个LayerDrawable是一个可以管理一组drawable对象的drawable。在LayerDrawable的drawable资源按照列表的顺序绘制,所以列表的最后一个drawable绘制在最上层。 
在xml文件中使用<layer-list>作为根节点来定义LayerDrawable,通过item子节点定义每一层的drawable,layer-list没有属性节点,只包含item子节点。

创建和使用

1.通过xml文件创建 
语法:

<?xml version="1.0" encoding="utf-8"?>  
<layer-list  
    xmlns:android="http://schemas.android.com/apk/res/android" >  
    <item  
        android:drawable="@[package:]drawable/drawable_resource"  
        android:id="@[+][package:]id/resource_name"  
        android:top="dimension"  
        android:right="dimension"  
        android:bottom="dimension"  
        android:left="dimension" />  
</layer-list>
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

元素: 
<layer-list>:作为根节点。 包含一个或者多个元素。 
<item>:定义一个drawable放置在layer drawable中。

<item>又具有如下属性:

  • android:id 资源ID,为这个item定义的唯一的资源ID,通过View.findViewById() 检索。
  • android:drawable 引用的drawable资源。
  • android:bottom/top/left/right/start/end 设置与相应方向的距离
  • android:gravity 在容器中的对齐方式
  • android:height 该层的高度。默认为图层的固有高度.
  • android:width 该层的宽度。默认为图层的固有宽度.
  • android:paddingBottom/End/Left/Right/Start/Top 设置相应方向的padding
  • android:paddingMode 表示层填充应该如何影响后续层的边界.取值为0:nest 1:stack

另外,在默认的情况下,每个drawable item都会缩放到合适的大小来适应视图。我们可以再<item>节点里加上<bitmap>元素来指定一个drawable,从而避免被缩放。除了<bitmap>元素,item节点里还可以使用<shape>等元素。

<item>
  <bitmap android:src="@drawable/image" android:gravity="center"/>
</item>
<item>
  <shape android:shape="rectangle">
       <solid android:color="#50000000"/>
  </shape>
</item>
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2.通过代码创建

       Drawable[] layers = new Drawable[3];
        layers[0] = getResources().getDrawable(R.drawable.ic_launcher);
        layers[1] = getResources().getDrawable(R.drawable.ic_launcher);
        layers[2] = getResources().getDrawable(R.drawable.ic_launcher);
        LayerDrawable layerDrawable = new LayerDrawable(layers);
        layerDrawable.setLayerInset(1, 10, 10, 0, 0);
        layerDrawable.setLayerInset(2, 20, 20, 0, 0);
        ((ImageView) findViewById(R.id.imageview)).setImageDrawable(layerDrawable);
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

其中setLayerInset方法原型为public void setLayerInset (int index, int l, int t, int r, int b)第一个参数为层的索引号,后面的四个参数分别为left、top、right和bottom。

LayerDrawable在开发中的使用频率还是较少的,一般的需求也可以通过Framelayout来实现,所以对于LayerDrawable我们简单的了解即可。


原文链接:https://liuzhichao.com/2016/android-layerdrawable.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值