【Android】ShapeDrawable屬性介紹


【博主聲明】轉載需指明文章出處!

· 介紹

    Android的Drawable為Android的UI界面提供了豐富多彩的顯示效果。例如,我們View的src屬性、background屬性可以設置的內容就包括各式各樣的drawable資源文件。drawable文件夾下的資源可以是一張圖片(jpg/png/bmp等格式),還可以是一個xml文件。當然,我們今天要介紹的是以xml方式實現的drawable文件,那么我們來看看以這種方式實現的優點。

    Drawable是一個抽象的概念,它可以被canvas繪制,常見的有顏色和圖片都可以是一個drawable。因為drawable可以做出一些特殊的ui效果,所以對比圖片來說,它的優點如下:

1、首先,它的使用比較簡單,在xml里已經定義了大量的屬性方法,我們只要熟悉各個屬性的ui效果和特點就可以自己組合各種的界面效果。

2、其次,它的實現成本比自定義View低,一些比較簡單的、定制性、重復性的UI效果使用drawable將會縮小開發成本。但是一些比較復雜的ui場景,drawable卻表現不出自定義view的那種效果。

3、相比較於圖片而言,drawable占用空間更小,這樣有利於縮小apk的體積。

    Drawable雖然有這些優點,但與此同時,它的分類又是比較細的。比如,android常用的Drawable有BitmapDrawable、ShapeDrawable、LayerDrawable、ScaleDrawable、TransitionDrawable等等。當然,還有一些我沒有列舉出來的,下文會逐步講解它們的特點以及用法。

· Drawable實現的案例

    首先,我們來看看比較常用的這幾種Drawable。

一、BitmapDrawable

<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:antialias="true"
    android:dither="true"
    android:filter="true"
    android:gravity="fill"
    android:src="@drawable/pig"
    android:tileMode="disabled" />

  以上是BitmapDrawable的一個小案例,那么我們將其設置到TextView的background屬性中,顯示效果如下:

正如上面的src屬性,設置的是一張小豬頭的圖片,還有其他一些屬性,我也將依次進行介紹。

1、android:dither屬性

     是否開啟抖動效果。它的作用例如:一張ARGB_8888色彩模式的圖片在僅支持RGB_565的設備上顯示,會使圖片不會太過於失真。因此,應該開啟此項。

2、android:filter屬性

     是否開啟過濾效果。建議啟用,開啟此項可以保持較好的顯示效果。

3、android:antialias屬性

     是否開啟抗鋸齒效果。建議啟用,開啟抗鋸齒效果會使圖片變得平滑。

4、android:tileMode屬性

     設置平鋪模式,當開啟時android:gravity屬性將失效。平鋪模式有三種,分別為:clamp、repeat、mirror。disabled表示不開啟,也是默認值。

     clamp作用是:讓四周圖像擴展到周圍區域。比如,圖像小於容器時,四周的每一個像素將會進行擴展直到填滿容器。

     re[eat作用是:復制圖像到周圍區域,一種簡單的平鋪效果。

     mirror作用是:水平和豎直方向上的一種鏡像效果。

5、android:gravity屬性

     設置圖像的位置以及顯示方式。這個屬性比較常用,類似view的gravity屬性,屬性內容比較多,大家可以自己嘗試一下看看效果。一般我們會選擇fill來進行對容器的填充效果。

二、ShapeDrawable

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners
        android:topLeftRadius="48dp"
        android:bottomRightRadius="48dp" />
    <stroke
        android:width="2dp"
        android:color="@color/colorGray"
        android:dashGap="16dp"
        android:dashWidth="8dp" />
    <solid android:color="@color/colorWhite" />
</shape>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners
        android:topLeftRadius="32dp"
        android:topRightRadius="32dp" />
    <stroke
        android:width="1px"
        android:color="@color/colorAccent" />
    <size
        android:width="100dp"
        android:height="100dp" />
    <gradient
        android:angle="270"
        android:centerColor="@color/colorAccent"
        android:centerX="1"
        android:centerY="10"
        android:endColor="@color/colorAccent"
        android:startColor="@color/colorWhite"
        android:type="linear" />
</shape>

上面兩個是ShapeDrawable的小案例,它們的顯示效果分別如下:

首先,我們來看第一個的顯示效果。內部以白色填充,邊框為灰色虛線,左上、右下以圓弧曲線彎曲效果。下面,我將依次介紹它們的標簽屬性效果。

1、shape標簽

     shape位於根標簽,android:shape屬性。它擁有四種形狀。分別為:rectangle(默認,矩形)、oval(橢圓)、line(橫線)、ring(圓環)

2、corners標簽

     作用於矩形的四周(僅適用於矩形),為四周設置角度。如上圖所示,矩形四個角的弧度。利用這一個標簽可以很方便的實現圓角矩形的效果。

3、stroke標簽

     表示描邊(或添加邊框)。如圖中第一個矩形所示,外圍的一圈灰色虛線效果。這里注意:android:dashWidth和android:dashGap任何一個不可以為0,否則虛線效果將不生效。當然,除了虛線,去除這兩個屬性即變為實線效果(如上圖第二個矩形)。

4、solid標簽

     表示為shape填充(如上圖矩形內部的填充顏色),很容易理解。

5、gradient標簽

     android:type屬性,設置顏色漸變效果(如上圖第二個矩形所示)。漸變模式有三種,分別為:linear(默認,線性漸變)、sweep(掃描漸變)、radial(徑向漸變)

掃描漸變:

徑向漸變(類似圓環效果):

注意:僅當設置了android:gradientRadius時才生效,表示設置漸變半徑。

關於gradient標簽還有一個地方值得注意,那就是android:angle屬性,漸變的角度必須設置為45的整數倍。例如:0,45,90,135,180...

還有其他一些標簽比較簡單,也容易理解。光看屬性名字就知道它的具體作用了。

 

 

 


免責聲明!

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



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