Android Drawable之LayerDrawable

来源:互联网 发布:数据采集系统解决方案 编辑:程序博客网 时间:2024/05/01 08:25

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

0 0
原创粉丝点击