天天看點

Android開發:shape和selector和layer-list的(詳細說明)

<shape>和<selector>在android ui設計中經常用到。比如我們要自定義一個圓角button,點選button有些效果的變化,就要用到<shape>和<selector>。

可以這樣說,<shape>和<selector>在美化控件中的作用是至關重要。

作用:xml中定義的幾何形狀 位置:res/drawable/檔案的名稱.xml
java代碼中:r.drawable.檔案的名稱 xml中:android:background="@drawable/檔案的名稱"
<shape>  android:shape=["rectangle" | "oval" | "line" | "ring"] 其中rectagle矩形,oval橢圓,line水準直線,ring環形 <shape>中子節點的常用屬性: <gradient>  漸變 android:startcolor   起始顔色 android:endcolor   結束顔色              android:angle   漸變角度,0從左到右,90表示從下到上,數值為45的整數倍,預設為0; android:type   漸變的樣式 liner線性漸變 radial環形漸變 sweep <solid >  填充 android:color   填充的顔色 <stroke >描邊 android:width  描邊的寬度 android:color  描邊的顔色 android:dashwidth  表示'-'橫線的寬度 android:dashgap  表示'-'橫線之間的距離 <corners >圓角 android:radius   圓角的半徑 值越大角越圓 android:toprightradius   右上圓角半徑 android:bottomleftradius  右下圓角角半徑 android:topleftradius  左上圓角半徑 android:bottomrightradius  左下圓角半徑 <padding >填充 android:bottom="1.0dip"  底部填充 android:left="1.0dip"  左邊填充 android:right="1.0dip"  右邊填充 android:top="0.0dip"  上面填充
根據不同的標明狀态來定義不同的現實效果 分為四大屬性: android:state_selected 是選中 android:state_focused 是獲得焦點 android:state_pressed 是點選 android:state_enabled 是設定是否響應事件,指所有事件 另: android:state_window_focused 預設時的背景圖檔 引用位置:res/drawable/檔案的名稱.xml
Android開發:shape和selector和layer-list的(詳細說明)
<?xml version="1.0" encoding="utf-8" ?>        <selector xmlns:android="http://schemas.android.com/apk/res/android">      <!-- 預設時的背景圖檔-->       <item android:drawable="@drawable/pic1" />         <!-- 沒有焦點時的背景圖檔 -->       <item       android:state_window_focused="false"            android:drawable="@drawable/pic_blue"       />        <!-- 非觸摸模式下獲得焦點并單擊時的背景圖檔 -->          android:state_focused="true"       android:state_pressed="true"         android:drawable= "@drawable/pic_red"       />      <!-- 觸摸模式下單擊時的背景圖檔-->          android:state_focused="false"       android:drawable="@drawable/pic_pink"       />       <!--選中時的圖檔背景-->          android:state_selected="true"       android:drawable="@drawable/pic_orange"    <!--獲得焦點時的圖檔背景-->          android:drawable="@drawable/pic_green"    </selector>   
将多個圖檔或上面兩種效果按照順序層疊起來
Android開發:shape和selector和layer-list的(詳細說明)

<?xml version="1.0" encoding="utf-8"?>  

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">  

    <item>  

      <bitmap android:src="@drawable/android_red"  

        android:gravity="center" />  

    </item>  

    <item android:top="10dp" android:left="10dp">  

      <bitmap android:src="@drawable/android_green"  

    <item android:top="20dp" android:left="20dp">  

      <bitmap android:src="@drawable/android_blue"  

</layer-list>  

Android開發:shape和selector和layer-list的(詳細說明)

<imageview  

    android:layout_height="wrap_content"  

    android:layout_width="wrap_content"  

    android:src="@drawable/layers" />  

效果圖:

Android開發:shape和selector和layer-list的(詳細說明)

以上三個标簽可以揉合到一塊兒來使用,所要實作的效果就是上面三種标簽的說明,比如下面這個例子:

Android開發:shape和selector和layer-list的(詳細說明)

<selector xmlns:android="http://schemas.android.com/apk/res/android">  

    <item android:state_pressed="true">  

        <layer-list>  

            <item android:bottom="8.0dip">  

                <shape>  

                    <solid android:color="#ffaaaaaa" />  

                </shape>  

            </item>  

            <item>  

                    <corners android:bottomleftradius="4.0dip" android:bottomrightradius="4.0dip" android:topleftradius="1.0dip" android:toprightradius="1.0dip" />  

                    <padding android:bottom="1.0dip" android:left="1.0dip" android:right="1.0dip" android:top="0.0dip" />  

                    <corners android:bottomleftradius="3.0dip" android:bottomrightradius="3.0dip" android:topleftradius="1.0dip" android:toprightradius="1.0dip" />  

                    <solid android:color="@color/setting_item_bgcolor_press" />  

        </layer-list>  

                    <solid android:color="@color/setting_item_bgcolor" />  

</selector>  

繼續閱讀