Android Drawable之LayerDrawable

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

Android Drawable之ClipDrawable

Android Drawable之ScaleDrawable

Android Drawable之ShapeDrawable

發佈了124 篇原創文章 · 獲贊 114 · 訪問量 226萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章