Android開發之Shape詳細解讀


  日常開發中,我們會遇到一些Button、Textview...等控件的背景是圓角矩形、圓形...等,和android默認的控件背景矩形不一致,此時shape的作用就體現出來了,我們可以根據shape屬性畫出很多我們意想不到的背景圖案,下面我會把所有shape的屬性都介紹一下。本文參考子 http://keeganlee.me/post/android/20150830。

1  shape標簽:

    android:shape

      rectangle: 矩形,默認的形狀,可以畫出直角矩形、圓角矩形、弧形等

      oval: 橢圓形,用得比較多的是畫正圓

      line: 線形,可以畫實線和虛線

      ring: 環形,可以畫環形進度條

    android:tint:給shape着色

    android:tintMode:着色模式(有關tint和tintMode請參看文章:http://blog.csdn.net/u010687392/article/details/47399719)

    android:dither:將在位圖的像素配置與屏幕不同時(例如:ARGB 8888 位圖和 RGB 565 屏幕)啟用位圖的抖動;值為“false”時則停用抖動。默認值為 true。

    android:visible:暫時還不清楚控制什么隱藏。

      android:useLevel:如果為true,則可在LevelListDrawable中使用。這通常應為“false”,否則形狀不會顯示

    android:thickness:環的厚度,指內環與外環的環間距。(只適用於shape為ring)

    android:thicknessRatio:浮點型,以環的寬度比率來表示環的厚度,默認為9,表示環的厚度為環的寬度除以9,該值會被android:thickness覆蓋(只適用於shape為ring)

      android:innerRatio:內環半徑(只適用於shape為ring)

    android:innerRadiusRatio:浮點型,以環的寬度比率來表示內環的半徑,默認為3,表示內環半徑為環的寬度除以3,該值會被android:innerRadius覆蓋(只適用於shape為ring)

 

2  shape下size標簽:設置shape寬高值

    android:height:高度

    android:width:寬度

    注意事項:只有控件寬高設置成wrap_content時,此處寬高才起作用,但是起到的卻是最小寬高值。也就是說,當控件寬高超過你此處指定的值時,它會變化(wrap_content!!!)

   

3  shape下solid標簽:設置形狀填充顏色

    android:color:指定色值

    

4  shape下padding標簽:設置內容與邊界的距離

    android:left:左內邊距

    android:top:上內邊距

    android:right:右內邊距

    android:bottom:左內邊距

 

5  shape下corners標簽:設置四個角的圓角

    android:radius:       四個角圓角

    android:topLeftRadius:   左上角的圓角

    android:topRightRadius:   右上角的圓角

    android:bottomLeftRadius:  左下角的圓角

    android:bottomRightRadiusleft:右下角的圓角

    注意事項:radius屬性值可以被其他四個屬性覆蓋。

 

6  shape下stroke標簽:設置shape的外邊界線

    android:color:     邊界線的顏色

    android:width:    邊界線的寬度      

    android:dashWidth:  段虛線的寬度(可以將邊界線理解成一段段線無間隔的連接)

    android:dashGap:   段虛線的間隔

 

7  shape下的gradient標簽:設置形狀漸變

    android:type:漸變的類型

      linear:線性漸變,默認的漸變類型

      radial:放射漸變,設置該項時,必須設置android:gradientRadius漸變半徑屬性

      sweep:掃描性漸變                            

    android:angle:漸變的角度,線性漸變時(linear也是默認的漸變類型)才有效,必須是45的倍數,0表示從左到右,90表示從下到上    

    android:centerX:漸變中心的相對X坐標,放射漸變時(radial)才有效,在0.0到1.0之間,默認為0.5,表示在正中間  

    android:centerY:漸變中心的相對X坐標,放射漸變時(radial才有效,在0.0到1.0之間,默認為0.5,表示在正中間

    android:useLevel:如果為true,則可在LevelListDrawable中使用。這通常應為“false”,否則形狀不會顯示

    android:startColor:漸變開始的顏色

    android:centerColor:漸變中間的顏色

    android:endColor:漸變結束的顏色

    android:gradientRadius:漸變的半徑,只有漸變類型為radial時才使用

 

  至此,所有有關shape屬性以及子標簽的屬性全部介紹完畢。

  下面讓我們看一下,實際應用時候的注意事項

  畫虛線時,有幾點特性必須要知道的:

    1. 只能畫水平線,畫不了豎線;
    2. 線的高度是通過stroke的android:width屬性設置的;
    3. size的android:height屬性定義的是整個形狀區域的高度;(前提是控件view沒有設置layout_height屬性值,即為wrap_content)
    4. size的height必須大於stroke的width,否則,線無法顯示;(與3同前提,否則就是size的height必須大於控件的height)
    5. 線在整個形狀區域中是居中顯示的;
    6. 線左右兩邊會留有空白間距,線越粗,與stroke的dashWidth的值相關。
    7. 引用虛線的view必須添加屬性android:layerType,值設為"software",否則顯示不了虛線。

 

  畫圓環時,有幾點特性必須要知道的:

     1.必須在shape根標簽下指定shape的類型為ring。

       2.默認情況下,innerRadiusRatio值為3,thicknessRatio值為9,但是這兩個比率可以分別被innerRadius、thickness覆蓋。

       3.默認情況下,圓環內徑是圓環厚度的三倍。

       4.當只指定了圓環內徑或者圓環厚度其中的任何一個屬性時,兩者之間的3倍關系都將不在存在,另一個屬性仍會用默認情況下的值。(畫圓環必須同時指定圓環內徑和圓環厚度)

       5.當同時指定了圓環內徑和圓環厚度時,那么這兩者默認的3倍關系將不存在了,而是按照你指定的屬性值畫圓環。

 

  如果想看使用的效果圖,請參看以下文章:

    1  http://keeganlee.me/post/android/20150830

    2  http://blog.csdn.net/rflyee/article/details/20785495

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM