Android Drawable之LayerDrawable

    xiaoxiao2026-09-12  6

    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>

    元素: <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 设置相应方向的paddingandroid: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>

    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);

    其中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

    其他几篇:

    Android Drawable之LayerDrawable

    Android Drawable之TransitionDrawable

    Android Drawable之InsetDrawable

    Android Drawable之ClipDrawable

    Android Drawable之ScaleDrawable

    Android Drawable之ShapeDrawable

    转载请注明原文地址: https://ju.6miu.com/read-1311982.html
    最新回复(0)