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

原文地址:http://blog.csdn.net/brokge/article/details/9713041/


<shape>和<selector>在Android UI設計中經常用到。比如我們要自定義一個圓角Button,點擊Button有些效果的變化,就要用到<shape>和<selector>。
可以這樣說,<shape>和<selector>在美化控件中的作用是至關重要。

在看這篇文章之前,可以看下這個小例子:鏤空按鈕的實現

1.Shape
簡介

作用: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" 

上面填充

2.Selector
簡介

根據不同的選定狀態來定義不同的現實效果

分爲四大屬性:

android:state_selected 是否選中

android:state_focused 是否獲得焦點

android:state_pressed 是否按壓

android:state_enabled 是否設置是否響應事件,指所有事件

另:

android:state_window_focused 默認時的背景圖片

引用位置:res/drawable/文件的名稱.xml

使用的方法:
Java代碼中:R.drawable.文件的名稱
XML中:Android:background="@drawable/文件的名稱"
[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <?xml version="1.0" encoding="utf-8" ?>       
  2. <selector xmlns:Android="http://schemas.android.com/apk/res/android">     
  3. <!-- 默認時的背景圖片-->      
  4. <item Android:drawable="@drawable/pic1" />        
  5. <!-- 沒有焦點時的背景圖片 -->      
  6. <item   
  7.    Android:state_window_focused="false"        
  8.    android:drawable="@drawable/pic_blue"   
  9.    />       
  10. <!-- 非觸摸模式下獲得焦點並單擊時的背景圖片 -->      
  11. <item   
  12.    Android:state_focused="true"   
  13.    android:state_pressed="true"     
  14.    android:drawable"@drawable/pic_red"   
  15.    />     
  16. <!-- 觸摸模式下單擊時的背景圖片-->      
  17. <item   
  18.    Android:state_focused="false"   
  19.    Android:state_pressed="true"     
  20.    Android:drawable="@drawable/pic_pink"   
  21.    />      
  22. <!--選中時的圖片背景-->      
  23. <item   
  24.    Android:state_selected="true"   
  25.    android:drawable="@drawable/pic_orange"   
  26.    />       
  27. <!--獲得焦點時的圖片背景-->      
  28. <item   
  29.    Android:state_focused="true"   
  30.    Android:drawable="@drawable/pic_green"   
  31.    />       
  32. </selector>   
.layer-list   
簡介:
將多個圖片或上面兩種效果按照順序層疊起來
例子:

[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <layer-list xmlns:android="http://schemas.android.com/apk/res/android">  
  3.     <item>  
  4.       <bitmap android:src="@drawable/android_red"  
  5.         android:gravity="center" />  
  6.     </item>  
  7.     <item android:top="10dp" android:left="10dp">  
  8.       <bitmap android:src="@drawable/android_green"  
  9.         android:gravity="center" />  
  10.     </item>  
  11.     <item android:top="20dp" android:left="20dp">  
  12.       <bitmap android:src="@drawable/android_blue"  
  13.         android:gravity="center" />  
  14.     </item>  
  15. </layer-list>  
[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <ImageView  
  2.     android:layout_height="wrap_content"  
  3.     android:layout_width="wrap_content"  
  4.     android:src="@drawable/layers" />  


效果圖:



4.最後

以上三個標籤可以揉合到一塊兒來使用,比如下面這個例子:


[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <selector xmlns:android="http://schemas.android.com/apk/res/android">  
  2.     <item android:state_pressed="true">  
  3.         <layer-list>  
  4.             <item android:bottom="8.0dip">  
  5.                 <shape>  
  6.                     <solid android:color="#ffaaaaaa" />  
  7.                 </shape>  
  8.             </item>  
  9.             <item>  
  10.                 <shape>  
  11.                     <corners android:bottomLeftRadius="4.0dip" android:bottomRightRadius="4.0dip" android:topLeftRadius="1.0dip" android:topRightRadius="1.0dip" />  
  12.   
  13.                     <solid android:color="#ffaaaaaa" />  
  14.   
  15.                     <padding android:bottom="1.0dip" android:left="1.0dip" android:right="1.0dip" android:top="0.0dip" />  
  16.                 </shape>  
  17.             </item>  
  18.             <item>  
  19.                 <shape>  
  20.                     <corners android:bottomLeftRadius="3.0dip" android:bottomRightRadius="3.0dip" android:topLeftRadius="1.0dip" android:topRightRadius="1.0dip" />  
  21.   
  22.                     <solid android:color="@color/setting_item_bgcolor_press" />  
  23.                 </shape>  
  24.             </item>  
  25.         </layer-list>  
  26.     </item>  
  27.     <item>  
  28.         <layer-list>  
  29.             <item android:bottom="8.0dip">  
  30.                 <shape>  
  31.                     <solid android:color="#ffaaaaaa" />  
  32.                 </shape>  
  33.             </item>  
  34.             <item>  
  35.                 <shape>  
  36.                     <corners android:bottomLeftRadius="4.0dip" android:bottomRightRadius="4.0dip" android:topLeftRadius="1.0dip" android:topRightRadius="1.0dip" />  
  37.   
  38.                     <solid android:color="#ffaaaaaa" />  
  39.   
  40.                     <padding android:bottom="1.0dip" android:left="1.0dip" android:right="1.0dip" android:top="0.0dip" />  
  41.                 </shape>  
  42.             </item>  
  43.             <item>  
  44.                 <shape>  
  45.                     <corners android:bottomLeftRadius="3.0dip" android:bottomRightRadius="3.0dip" android:topLeftRadius="1.0dip" android:topRightRadius="1.0dip" />  
  46.   
  47.                     <solid android:color="@color/setting_item_bgcolor" />  
  48.                 </shape>  
  49.             </item>  
  50.         </layer-list>  
  51.     </item>  
  52. </selector>  

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