天天看點

Android圖形層疊 – Layer-list

1 概述

1.1 編寫目的

學習Android圖形層疊layer-list相關的知識,記錄下來,友善後續學習及查詢。

2 Layer-list圖形

Android上layer-list有layer-list和item兩種屬性,其中layer-list為一級屬性,item為子屬性。基本結構如下圖:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item />
</layer-list>
           

2.1 Layer-list屬性

Layer-list共包含以下屬性:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:paddingTop="100px"
    android:paddingLeft="100px"
    android:paddingBottom="100px"
    android:paddingRight="100px"
    android:autoMirrored="true"
    android:opacity="opaque"
    android:paddingMode="stack"
    android:paddingStart="100px "
    android:paddingEnd="100px">
</layer-list>
           

PaddingTop:層疊圖形距離上個圖形上邊的距離。

PaddingLeft:層疊圖形距離上個圖形左邊的距離。

PaddingBottom:層疊圖形距離上個圖形下邊的距離。

PaddingRight:層疊圖形距離上個圖形右邊的距離。

AautoMirrored:設定圖檔是否需要鏡像反轉,當布局方向是RTL,即從右到左布局時才有用。

Opacity:透明性,["translucent " | " opaque "| " transparent "],分别為半透明、不透明、透明。

PaddingMode:暫未試出效果,["stack" | " nest "]。

PaddingStart:層疊圖形距離上個圖形開始位置的距離。

PaddingEnd:層疊圖形距離上個圖形結束位置的距離。

2.1.1 PaddingTop、PaddingBottom、PaddingLeft、PaddingRight效果

如下分别建立三個圖形layer_rotate.xml、layer_rotate_greeen.xml、layer_rotate_blue.xml,三個圖形除顔色外完全一緻, layer_rotate.xml如下:

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="100px"
    android:height="100px"
    android:viewportWidth="100"
    android:viewportHeight="100">
    <path
        android:strokeWidth="0.5"
        android:strokeColor="@color/yellow"
        android:pathData="M0,0 h100 v100 h-100 z
                          M50,0 v100 M0,50 h100"/>
    <path
        android:fillColor="@color/yellow"
        android:pathData="M50,50 Q70,50 70,70
                          M50,50 Q50,70 70,70"/>
</vector>
           
Android圖形層疊 – Layer-list

建立my_layerlist.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <layer-list
            android:paddingTop="20px"
            android:paddingBottom="20px"
            android:paddingLeft="20px"
            android:paddingRight="20px">
            <item android:drawable="@drawable/layer_rotate_greeen"/>
        </layer-list>
    </item>
    <item>
        <layer-list
            android:paddingTop="20px"
            android:paddingBottom="20px"
            android:paddingLeft="20px"
            android:paddingRight="20px">
            <item android:drawable="@drawable/layer_rotate_blue"/>
        </layer-list>
    </item>
    <item android:drawable="@drawable/layer_rotate"/>
</layer-list>
           

效果如下:

Android圖形層疊 – Layer-list
Android圖形層疊 – Layer-list
2.1.2 PaddingStart、PaddingEnd效果
和paddingLeft、paddingRight等同時使用時,PaddingStart、PaddingEnd有效。效果如下:
Android圖形層疊 – Layer-list
Android圖形層疊 – Layer-list
Android圖形層疊 – Layer-list

2.2 Item屬性

Item共包含以下屬性:

<item
    android:id="@+id/my_layerlist_item"
    android:drawable="@drawable/my_layerlist_red"
    android:gravity="center"
    android:start="100px"
    android:end="100px"
    android:height="500px"
    android:width="500px"
    android:left="100px"
    android:right="100px"
    android:top="100px"
    android:bottom="100px">
	<animated-rotate />
<animated-selector />
<animation-list />
<bitmap />
<clip />
<color />
<inset />
<layer-list />
<level-list />
<nine-patch />
<ripple />
<rotate />
<scale />
<selector />
<shape />
<transition />
</item>
           

Id:item名字。

Drawble:指向圖檔資源。

Start:開始位置偏移距離。

End:結束位置偏移距離。

Height:圖形高度。

Width:圖形寬度。

Left:距離左邊距離。

Right:距離右邊距離。

Top:距離上邊距離。

Bottom:距離下邊距離。

其中animated-rotate、animated-selector、animation-list、bitmap、clip、color、inset、layer-list、level-list、nine-patch、ripple、rotate、scale、selector、shape、transition為下級屬性:

Bitmap: 詳情Bitmap圖形。

Shape: 詳情自定義圖形。

Selector: 詳情圖形選擇。

下面是各種一級屬性的效果圖。

2.2.1 Start屬性
Android圖形層疊 – Layer-list
2.2.2 End屬性
Android圖形層疊 – Layer-list
2.2.3 Start&End屬性
Android圖形層疊 – Layer-list
2.2.4 Height&Width屬性
Android圖形層疊 – Layer-list
2.2.5 Left屬性
Android圖形層疊 – Layer-list
2.2.6 Right屬性
Android圖形層疊 – Layer-list
2.2.7 Left&Right屬性
Android圖形層疊 – Layer-list
2.2.8 Top屬性
Android圖形層疊 – Layer-list
2.2.9 Bottom屬性
Android圖形層疊 – Layer-list
2.2.10 Top&Buttom屬性
Android圖形層疊 – Layer-list

2.3 一些layer-list效果

2.3.1 邊框線效果
隻畫底部邊框,修改item中top、right、left、bottom大小小于等于shape>stroke>width的-2倍可以使相應的邊框顯示不出來,修改my_layerlist.xml隻顯示底邊如下:
Android圖形層疊 – Layer-list
實際效果:
Android圖形層疊 – Layer-list
顯示上下兩邊,修改my_layerlist.xml如下:
Android圖形層疊 – Layer-list
實際效果:
Android圖形層疊 – Layer-list
2.3.2 縮放重疊效果

 建立my_layerlist_red.xml、my_layerlist_yellow.xml、my_layerlist_blue.xml,除了顔色其它都一樣,my_layerlist_red.xml如下所示:

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportWidth="24.0"
    android:viewportHeight="24.0">
    <path
        android:fillColor="@color/red"
        android:pathData="M12,12c2.21,0 4,-1.79 4,-4s-1.79,-4 -4,-4 -4,1.79 -4,4 1.79,4 4,4zM12,14c-2.67,0 -8,1.34 -8,4v2h16v-2c0,-2.66 -5.33,-4 -8,-4z"/>
</vector>
           
Android圖形層疊 – Layer-list
使用現成圖檔效果
Android圖形層疊 – Layer-list
2.3.3 不縮放重疊效果
設定gravity="center",如下圖所示:
Android圖形層疊 – Layer-list
 使用現成圖檔效果:
Android圖形層疊 – Layer-list
設定gravity="left|top",如下圖所示:
Android圖形層疊 – Layer-list
使用bitmap,其中gravity="center",如下所示:
Android圖形層疊 – Layer-list
2.3.4 旋轉重疊效果

使用layer_rotate.xml圖檔,如圖所示圖檔大小100,左上角在50,50處,如下所示(黃色參考線,後面删除掉):

Android圖形層疊 – Layer-list
使用rotate旋轉,旋轉中心設定為50,50。效果圖如下:
Android圖形層疊 – Layer-list

每45度設定一個效果如下:

Android圖形層疊 – Layer-list