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 設置相應方向的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>
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