使用shape自定義控件形狀

概述

 筆者認爲,android應用UI設計應該從容大方,簡潔優雅,應儘量避免繁瑣多餘的形狀線條。因此筆者建議使用shape自定義View控件的外觀。
 建議理由:shape只能自定義簡單形狀和顏色填充,然而卻有完美的邊緣渲染,不會出現邊緣鋸齒或者模糊的廉價感,這一點對於android UI是十分重要的。並且shape的操作和使用都十分簡單。
 操作過程爲先在drawable目錄下創建根節點爲shape.xml資源文件,之後在具體View控件中使用android:background=@drawable/targetshape將繪製的圖形設置爲View控件背景即可。

子元素與屬性

android:shape屬性

此屬性必須全局聲明,用來指定圖形的形狀基礎。屬性值:
rectangle:屬性默認值,形狀基礎爲矩形
oval:形狀基礎爲橢圓
ring:形狀基礎爲圓環
line:形狀基礎爲直線

solid

 solid子元素用於指定圖形填充色。屬性:
android:color
 屬性值可以是RGB888格式,不指定透明度,例如:android:color="#ff00ff";也可以是ARGB格式,即在RGB888格式的基礎上添加透明度值(Alpha),十六進制下的高兩位指定透明度,例如:android:color="#50ff00ff"

size

 size子元素用於指定圖形的寬高。屬性:
android:width
android:height
 此子元素不可用於linering
 用於oval時,它的兩個屬性中一個指定長軸長,另一個指定短軸長。

corners

 corners子元素指定矩形四個角的圓角半徑。屬性:
android:radius:同時指定四個角度圓角半徑。
android:topLeftRadius:單獨指定左上角圓角半徑。
android:topRightRadius:單獨指定右上角圓角半徑。
android:bottomLeftRadius:單獨指定左下角圓角半徑。
android:bottomRightRadius:單獨指定右下角圓角半徑。
 此子元素只能用於矩形形狀基礎。

stroke

 stroke子元素指定形狀的描邊。常用屬性:
android:width:指定描邊寬度。
android:color:指定描邊顏色。可用RGB888ARGB

gradient

 gradient子元素指定顏色漸變。屬性:
android:type:指定漸變類型,屬性值有:linear(線性漸變)、radial(徑向漸變)、sweep(掃描漸變)。
android:startColor:漸變的開始顏色。
android:centerColor:漸變的中間顏色。
android:endColor:漸變的結束顏色。
android:angle:漸變方向角,屬性值必須是45的整數倍。只對線性漸變有效。
android:gradientRadius:漸變半徑,只對徑向漸變有效。
android:centerX:X方向的漸變中心位置,屬性值爲0.0到1.0,0.0表示圖形最左,1.0表示圖形最右。
android:centerY:Y方向的漸變中心位置,屬性值爲0.0到1.0,0.0表示圖形最下,1.0表示圖形最上。
 顏色的漸變經歷:startColorTocenterColorToendColor
gradient的顏色將覆蓋solid的顏色。

padding

 padding子元素用於設置內邊距,即內容(比如文字)與邊緣的距離。

line

 line可以繪製直線和虛線。由於種種原因,筆者放棄瞭解。

ring

 ring的尺寸屬性必須全局聲明

常用屬性

android:innerRadius:圓環內徑。
android:thickness:圓環厚度。
android:useLevel:只有此屬性值爲false形狀纔會顯示。

代碼示例

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="ring"
    android:innerRadius="100dp"
    android:thickness="20dp"
    android:useLevel="false">
    <gradient
    android:type="sweep"
    android:startColor="#0000ff"
    android:endColor="#ff0000" />
</shape>

效果如下圖:
效果

動態修改shape顏色

 假如Button使用shape繪製的圖形作爲背景,那麼在Java代碼中動態修改顏色的方法爲:

Button btn_1=(Button)findviewById(R.id.btn_1);
GradientDrawable grd_1=btn_1.getBackground();
grd_1.setColor(0x50ff00ff);

 還可以使用setAlpha()方法動態設置透明度。
歡迎指正

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