Android開發之Shape和Selector、Layer-list的詳解


轉載請備註出自於:http://blog.csdn.net/qq_22118507/article/details/51505844

三者的使用的方法:
Java代碼中:R.drawable.文件的名稱 
XML中:Android:background="@drawable/文件的名稱"
1.Shape
[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <?xml version="1.0" encoding="utf-8"?>    
  2.   
  3.  <!--     
  4.     android:shape=["rectangle" | "oval" | "line" | "ring"]    
  5.     shape的形狀,默認爲矩形,可以設置爲矩形(rectangle)、橢圓形(oval)、線性形狀(line)、環形(ring) 下面的屬性只    android:shape="ring" 時可用:    
  6.     android:innerRadius         尺寸,內環的半徑。    
  7.     android:innerRadiusRatio    浮點型,以環的寬度比率來表示內環的半徑,例如,如果android:innerRadiusRatio,表示                                 內環半徑等於環的寬度除以5,這個值是可以被覆蓋的,默認爲9.    
  8.     android:thickness           尺寸,環的厚度    
  9.     android:thicknessRatio      浮點型,以環的寬度比率來表示環的厚度,例如,如果               android:thicknessRatio="2"那麼環的厚度就等於環的寬度除以2。這個值是可以被android:thickness覆蓋的,默認值是                                 3.    
  10.     android:useLevel            boolean值,如果當做是LevelListDrawable使用時值爲true,否則爲false.    
  11.   -->    
  12. <shape    
  13.     xmlns:android="http://schemas.android.com/apk/res/android"    
  14.     android:shape="rectangle">    
  15.         
  16.     <!--    
  17.         圓角    
  18.         android:radius              整型 半徑    
  19.         android:topLeftRadius       整型 左上角半徑    
  20.         android:topRightRadius      整型 右上角半徑    
  21.         android:bottomLeftRadius    整型右下角半徑    
  22.         android:bottomRightRadius   整型左下角半徑  
  23.   
  24. 這裏有個地方需要注意,bottomleftradius是右下角,而不是左下角,這個不要記錯了
    還有網上看到有人說設置成0dp無效,不過我在測試中發現是可以的,我用的是2.2,可能修復了這個問題吧,如果無效的話那就只能設成1dp了。
  25.      -->    
  26.      <corners      
  27.         android:radius="8dp"    
  28.         android:topLeftRadius="5dp"    
  29.         android:topRightRadius="15dp"    
  30.         android:bottomLeftRadius="20dp"    
  31.         android:bottomRightRadius="25dp"      
  32.         />    
  33.          
  34.      <!--    
  35.         漸變色    
  36.         android:startColor  顏色值                             起始顏色    
  37.         android:endColor    顏色值                             結束顏色    
  38.         android:centerColor 整型                               漸變中間顏色,即開始顏色與結束顏色之間的顏色    
  39.         android:angle       整型                               漸變角度
  40.  
  41.         使用android:angle的注意事項:
  42.  angle=0時,漸變色是從左向右。 然後逆時針方向轉,當angle=90時爲從下往上。angle必須爲45的整數倍

          另外漸變默認的模式爲android:type="linear",即線性漸變,可以指定漸變爲徑向漸變,android:type="radial",徑向漸變需要指定半徑android:gradientradius="50"。

       android:angle網 上有各種說法,這裏,我說說自己的實驗結果,漸變的時候,最原始的,即android:angle=“0”時,是從左到右,按照開始顏色到結束顏色來渲染 的,android:angle=“90”是從上到下來渲染的,android:angle=“180”是從右到左來渲染的,android:angle=“360”和android:angle=“0”是一樣的,所以這裏應該是這樣的,渲染時按照最原始的渲染色板(把控件內部看作一塊可以繞中心旋轉的板子)圍繞控件中心來旋轉相應的度數,即android:angle裏面的值就是所需要旋轉的角度,只是這個旋轉角度必須是45的整數倍)

        
  43.         android:type        ["linear" | "radial" | "sweep"] 漸變類型(取值:linear、radial、sweep)    
  44.                             linear 線性漸變,這是默認設置    
  45.                             radial 放射性漸變,以開始色爲中心。    
  46.                             sweep 掃描線式的漸變。  
  47.   
  48.        android:useLevel     ["true" | "false"]                如果要使用LevelListDrawable對象,就要設置爲            true。設置爲true無漸變。false有漸變色  
  49.   
  50.        android:gradientRadius 整型                            漸變色半徑.當 android:type="radial" 時才使用。            單獨使用 android:type="radial"會報錯。    
  51.        android:centerX      整型                              漸變中心X點座標的相對位置    
  52.        android:centerY      整型                              漸變中心Y點座標的相對位置    
  53.     -->    
  54.     <gradient    
  55.         android:startColor="#FFFF0000"    
  56.         android:endColor="#80FF00FF"    
  57.         android:angle="45"    
  58.         />     
  59.             
  60.     <!--    
  61.         內邊距,即內容與邊的距離     
  62.         android:left    整型 左內邊距    
  63.         android:top     整型 上內邊距    
  64.         android:right   整型 右內邊距    
  65.         android:bottom  整型 下內邊距    
  66.       -->    
  67.      <padding     
  68.          android:left="10dp"    
  69.          android:top="10dp"    
  70.          android:right="10dp"    
  71.          android:bottom="10dp"    
  72.          />    
  73.          
  74.     <!--     
  75.         size 大小    
  76.         android:width   整型 寬度    
  77.         android:height  整型 高度    
  78.     -->    
  79.     <size    
  80.         android:width="600dp"    
  81.         />    
  82.         
  83.     <!--    
  84.         內部填充    
  85.         android:color   顏色值 填充顏色    
  86.     -->    
  87.     <solid     
  88.         android:color="#ffff9d77"    
  89.         />    
  90.         
  91.      <!--    
  92.         描邊    
  93.         android:width       整型  描邊的寬度    
  94.         android:color       顏色值     描邊的顏色    
  95.         android:dashWidth   整型  表示描邊的樣式是虛線的寬度, 值爲0時,表示爲實線。值大於0則爲虛線。    
  96.         android:dashGap     整型  表示描邊爲虛線時,虛線之間的間隔 即“ - - - - ”    
  97.      -->    
  98.      <stroke     
  99.         android:width="2dp"    
  100.         android:color="#dcdcdc"      
  101.         />     
  102. </shape>  
2.Selector

根據不同的選定狀態來定義不同的現實效果,分爲四大屬性:

android:state_selected 是選中

android:state_focused 是獲得焦點

android:state_pressed 是點擊

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

另:

android:state_window_focused 默認時的背景圖片


[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.    />   <!--獲得焦點時的圖片背景-->      
    <item   
       Android:state_focused="true"   
       Android:drawable="@drawable/pic_green"   
       />      
  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>   


3.layer-list

3.1多圖層疊加效果(1)

                          

四個角都是圓角的效果。如果讓UI設計人員直接出圖,可能會更簡單一些。但是我們使用android中layer-list多圖層疊加效果同樣可以實現。

我們把它拆分爲三個部分,第一個部分是最頂端的那一行(我這裏稱爲頂部),第二部分是中間部分(中間部分不需要圓角效果),第三部分是底部。

頂部的實現:

頂部是一個有灰色邊框但無下邊框,帶圓角,白色背景的長方體。實現效果如下:

<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">  
    <item >  
        <shape>  
            <solid android:color="#FFFFFF" />  
            <corners android:topLeftRadius="10dp" android:topRightRadius="10dp"  
                android:bottomRightRadius="0.1dp" android:bottomLeftRadius="0.1dp" />  
            <stroke android:width="1dp" android:color="#ffa8abad" />  
        </shape>  
    </item>  
     <item android:top="1dp" android:left="1dp" android:right="1dp">  
        <shape>  
            <solid android:color="#FFFFFF" />  
            <corners android:topLeftRadius="10dp" android:topRightRadius="10dp"  
                android:bottomRightRadius="0.1dp" android:bottomLeftRadius="0.1dp" />  
            <stroke android:width="1dp" android:color="#ffffffff" />  
        </shape>  
    </item> 
</layer-list>

中間部分是一個不帶圓角 白色背景 灰色邊框 無下邊框 長方體.實現效果如下:

<?xml version="1.0" encoding="UTF-8"?>  
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >  
  <item>  
        <shape>  
            <solid android:color="#FFFFFF" />  
            <stroke  
                android:width="1dp"  
                android:color="#ffa8abad" />  
        </shape>  
    </item> 
     <item  
        android:left="1dp"  
        android:right="1dp"  
        android:top="1dp">  
        <shape>  
            <solid android:color="#FFFFFF" />  
            <stroke  
                android:width="1dp"  
                android:color="#ffffffff" />  
        </shape>  
    </item> 
</layer-list>

底部是一個具有底部圓角,白色背景,灰色邊框的長方體,實現效果如下:

<?xml version="1.0" encoding="UTF-8"?>  
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">  
    <item>  
        <shape>  
            <solid android:color="#FFFFFF" />  
            <corners android:topLeftRadius="0.1dp" android:topRightRadius="0.1dp"  
                android:bottomRightRadius="10dp" android:bottomLeftRadius="10dp" />  
            <stroke android:width="1dp" android:color="#ffa8abad" />  
        </shape>  
    </item>  
   <item android:top="1dp" android:bottom="1dp" android:left="1dp" android:right="1dp">  
        <shape>  
            <solid android:color="#FFFFFF" />  
            <corners android:topLeftRadius="0.1dp" android:topRightRadius="0.1dp"  
                android:bottomRightRadius="10dp" android:bottomLeftRadius="10dp" />  
            <stroke android:width="1dp" android:color="#ffffffff" />  
        </shape>  
    </item>
</layer-list>

3.3多圖層疊加效果(2)

<?xml version="1.0" encoding="UTF-8"?>    
  1.  <layer-list    
  2.    xmlns:android="http://schemas.android.com/apk/res/android">   
  3.     <!--圖片1-->  
  4.      <item android:id="@+id/user_faceback_drawable"  
  5.            android:drawable="@drawable/faceback" />    
  6.     <!--圖片2-->  
  7.      <item android:id="@+id/user_face_drawable"   
  8.            android:drawable="@drawable/h001"     
  9.            android:left="10.0dip"   
  10.            android:top="18.0dip"   
  11.            android:right="25.0dip"   
  12.            android:bottom="35.0dip" />    
  13.  </layer-list>   
  14. <!--2個圖片的疊加-->  

    效果圖如下:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章