android開發之shape詳解


很多時候,使用shape能夠實現的效果,你用一張圖片也能夠實現,但問題是一張圖片無論你怎么壓縮,它都不可能比一個xml文件小,因此,為了獲得一個高性能的手機App,我們在開發中應該遵循這樣一個原則:能夠用shape實現的效果盡量不使用圖片來實現。


今天我們就一起來看看shape的使用。

首先,使用shape畫的圖形,這個xml文件的根節點是shape,如下:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle|oval|line|ring" >
<shape>

shape取值有四種,可以是rectangle(長方形),oval(橢圓),line(線條),ring(圓環),如果設置的話默認是長方形,只有當我們要畫的圖形是ring的時候,下面這幾個屬性才會生效:


  1. android:innerRadius:內環的半徑。
  2. android:innerRadiusRatio:內環的比例,比如這個值為2,那么內環的半徑就為環半徑除以2,如果設置了第一個屬性,則這個屬性不起作用。
  3. android:thickness:環的厚度。
  4. android:thicknessRatio:環的厚度比例,比如這個值為2,那么環的厚度就為環半徑除以2,如果設置了第三個屬性,則這個屬性不起作用。
  5. android:useLevel:只有當我們的shape使用在LevelListDrawable中的時候,這個值為true,否則為false。


以上是shape節點,在shape節點中我們還可以定義其他的節點:


圓角:

<corners 
    android:radius="20dp"
    android:topLeftRadius="20dp"
    android:topRightRadius="20dp"
    android:bottomLeftRadius="0dp"
    android:bottomRightRadius="0dp"
    />

android:radius表示長方形四個角的半徑,當然也可以每個角單獨設定,后面單獨設定的圓角半徑會覆蓋android:radius。


漸變:


    <gradient
        android:angle="90"
        android:centerColor="#9ACD32"
        android:endColor="#9AC0CD"
        android:startColor="#9AFF9A"
        android:type="linear"
        android:useLevel="false" />


  1. android:angle="90"表示漸變的起始位置,這個值必須為45的倍數,包括0,0表示從左往右漸變,逆時針旋轉,依次是45,90,135.....,90表示從下往上漸變,270表示從上往下漸變,剩下的大家依次去推理。
  2. android:startColor="#9AFF9A",表示漸變的起始顏色
  3. android:centerColor="#9ACD32"表示漸變的過渡顏色
  4. android:endColor="#9AC0CD"表示漸變的結束顏色
  5. type表示漸變的類型,有三種,分別是linear(線性變化),radial(輻射漸變)以及sweep(掃描漸變)
  6. 當type為radial時,我們要設置android:gradientRadius="",這個表示漸變的半徑(線性漸變和掃描漸變不需要設置)


填充:

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

這個比較簡單,不多說。


描邊:

<stroke 
    android:width="1dp"
    android:color="#FFFF00"
    android:dashWidth="15dp"
    android:dashGap="5dp"
    />

  1. android:dashWidth表示虛線的寬度
  2. android:dashGap表示虛線之間的間隔
  3. 以上兩個屬性如果不設置則為實線


大小:


<size 
    android:width="1dp"
    android:height="1dp"
    />

這個表示該shape的大小,默認情況下,shape的大小與它所在的容器大小成正比。如果我們在ImageView中使用這個shape,那么可以通過android:scaleType="center"屬性來限制這種縮放。


當然,還有一種padding,這和我們在xml文件中用的一樣,我這里就不多說了。


最后,基於以上幾種特性,我做了以下幾種效果供大家參考。



示例效果代碼下載https://github.com/lenve/shape







版權聲明:本文為博主原創文章,未經博主允許不得轉載。若有錯誤地方,還望批評指正,不勝感激。


免責聲明!

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



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