原創(chuàng)文章害捕,轉(zhuǎn)載請(qǐng)注明:轉(zhuǎn)載自Keegan小鋼
并標(biāo)明原文鏈接:http://keeganlee.me/post/android/20150830
Android樣式的開(kāi)發(fā):selector篇
Android樣式的開(kāi)發(fā):layer-list篇
Android樣式的開(kāi)發(fā):drawable匯總篇
Android樣式的開(kāi)發(fā):View Animation篇
Android樣式的開(kāi)發(fā):Property Animation篇
一個(gè)應(yīng)用妹萨,應(yīng)該保持一套統(tǒng)一的樣式,包括Button播歼、EditText、ProgressBar掰读、Toast秘狞、Checkbox等各種控件的樣式,還包括控件間隔蹈集、文字大小和顏色烁试、陰影等等。web的樣式用css來(lái)定義拢肆,而android的樣式主要?jiǎng)t是通過(guò)shape减响、selector、layer-list郭怪、level-list支示、style、theme等組合實(shí)現(xiàn)鄙才。我將用一系列文章颂鸿,循序漸進(jìn)地講解樣式的每個(gè)方面該如何實(shí)現(xiàn)。第一個(gè)要講的就是shape攒庵,最基礎(chǔ)的形狀定義工具嘴纺。
一般用shape定義的xml文件存放在drawable目錄下,若項(xiàng)目沒(méi)有該目錄則新建一個(gè)叙甸,而不要將它放到drawable-hdpi等目錄中颖医。
使用shape可以自定義形狀,可以定義下面四種類(lèi)型的形狀裆蒸,通過(guò)android:shape屬性指定:
rectangle: 矩形熔萧,默認(rèn)的形狀,可以畫(huà)出直角矩形、圓角矩形佛致、弧形等
oval: 橢圓形贮缕,用得比較多的是畫(huà)正圓
line: 線(xiàn)形,可以畫(huà)實(shí)線(xiàn)和虛線(xiàn)
ring: 環(huán)形俺榆,可以畫(huà)環(huán)形進(jìn)度條
rectangle
rectangle是默認(rèn)的形狀感昼,也是用得最多的形狀,一些文字背景罐脊、按鈕背景定嗓、控件或布局背景等,以下是一些簡(jiǎn)單的例子:
實(shí)現(xiàn)上面的那些效果萍桌,都用到了以下這些特性:
solid: 設(shè)置形狀填充的顏色宵溅,只有android:color一個(gè)屬性
android:color填充的顏色
padding: 設(shè)置內(nèi)容與形狀邊界的內(nèi)間距,可分別設(shè)置左右上下的距離
android:left左內(nèi)間距
android:right右內(nèi)間距
android:top上內(nèi)間距
android:bottom下內(nèi)間距
gradient: 設(shè)置形狀的漸變顏色上炎,可以是線(xiàn)性漸變恃逻、輻射漸變、掃描性漸變
android:type漸變的類(lèi)型
linear線(xiàn)性漸變藕施,默認(rèn)的漸變類(lèi)型
radial放射漸變寇损,設(shè)置該項(xiàng)時(shí),android:gradientRadius也必須設(shè)置
sweep掃描性漸變
android:startColor漸變開(kāi)始的顏色
android:endColor漸變結(jié)束的顏色
android:centerColor漸變中間的顏色
android:angle漸變的角度裳食,線(xiàn)性漸變時(shí)才有效,必須是45的倍數(shù)胞谈,0表示從左到右尘盼,90表示從下到上
android:centerX漸變中心的相對(duì)X坐標(biāo)憨愉,放射漸變時(shí)才有效烦绳,在0.0到1.0之間,默認(rèn)為0.5配紫,表示在正中間
android:centerY漸變中心的相對(duì)X坐標(biāo)径密,放射漸變時(shí)才有效,在0.0到1.0之間躺孝,默認(rèn)為0.5享扔,表示在正中間
android:gradientRadius漸變的半徑,只有漸變類(lèi)型為radial時(shí)才使用
android:useLevel如果為true植袍,則可在LevelListDrawable中使用
corners: 設(shè)置圓角惧眠,只適用于rectangle類(lèi)型,可分別設(shè)置四個(gè)角不同半徑的圓角于个,當(dāng)設(shè)置的圓角半徑很大時(shí)氛魁,比如200dp,就可變成弧形邊了
android:radius圓角半徑,會(huì)被下面每個(gè)特定的圓角屬性重寫(xiě)
android:topLeftRadius左上角的半徑
android:topRightRadius右上角的半徑
android:bottomLeftRadius左下角的半徑
android:bottomRightRadius右下角的半徑
stroke: 設(shè)置描邊秀存,可描成實(shí)線(xiàn)或虛線(xiàn)捶码。
android:color描邊的顏色
android:width描邊的寬度
android:dashWidth設(shè)置虛線(xiàn)時(shí)的橫線(xiàn)長(zhǎng)度
android:dashGap設(shè)置虛線(xiàn)時(shí)的橫線(xiàn)之間的距離
接下來(lái)說(shuō)下實(shí)際怎么使用。以下是加了虛線(xiàn)描邊的矩形的代碼或链,文件命名為bg_rectangle_with_stroke_dash.xml惫恼,放在drawable目錄下:
接著在要使用的view里引用就可以了,例如本例中用做TextView的background:
oval
oval用來(lái)畫(huà)橢圓澳盐,而在實(shí)際應(yīng)用中祈纯,更多是畫(huà)正圓,比如消息提示叼耙,圓形按鈕等盆繁,下圖是一些例子:
上面的效果圖應(yīng)用了solid、padding旬蟋、stroke油昂、gradient、size幾個(gè)特性倾贰。size是用來(lái)設(shè)置形狀大小的冕碟,如下:
size: 設(shè)置形狀默認(rèn)的大小,可設(shè)置寬度和高度
android:width寬度
android:height高度
數(shù)字0是默認(rèn)的橢圓匆浙,只加了solid填充顏色安寺,數(shù)字1則加了上下左右4dp的padding,后面的數(shù)字都是正圓首尼,是通過(guò)設(shè)置size的同樣大小的寬高實(shí)現(xiàn)的挑庶,也可以通過(guò)設(shè)置控件的寬高一致大小來(lái)實(shí)現(xiàn)。數(shù)字3加了描邊软能,數(shù)字4是鏤空描邊迎捺,數(shù)字5是虛線(xiàn)描邊,數(shù)字6用了radial漸變查排。注意凳枝,使用radial漸變時(shí),必須指定漸變的半徑跋核,即android:gradientRadius屬性岖瑰。
以下是漸變的代碼實(shí)現(xiàn),文件為bg_oval_with_gradient.xml:
引用的代碼:
line
line主要用于畫(huà)分割線(xiàn)砂代,是通過(guò)stroke和size特性組合來(lái)實(shí)現(xiàn)的蹋订,先看虛線(xiàn)的代碼:
畫(huà)線(xiàn)時(shí),有幾點(diǎn)特性必須要知道的:
只能畫(huà)水平線(xiàn)刻伊,畫(huà)不了豎線(xiàn)露戒;
線(xiàn)的高度是通過(guò)stroke的android:width屬性設(shè)置的难礼;
size的android:height屬性定義的是整個(gè)形狀區(qū)域的高度;
size的height必須大于stroke的width玫锋,否則蛾茉,線(xiàn)無(wú)法顯示;
線(xiàn)在整個(gè)形狀區(qū)域中是居中顯示的撩鹿;
線(xiàn)左右兩邊會(huì)留有空白間距谦炬,線(xiàn)越粗,空白越大节沦;
引用虛線(xiàn)的view需要添加屬性android:layerType键思,值設(shè)為"software",否則顯示不了虛線(xiàn)甫贯。
ring
首先吼鳞,shape根元素有些屬性只適用于ring類(lèi)型,先過(guò)目下這些屬性吧:
android:innerRadius內(nèi)環(huán)的半徑
android:innerRadiusRatio浮點(diǎn)型叫搁,以環(huán)的寬度比率來(lái)表示內(nèi)環(huán)的半徑赔桌,默認(rèn)為3,表示內(nèi)環(huán)半徑為環(huán)的寬度除以3渴逻,該值會(huì)被android:innerRadius覆蓋
android:thickness環(huán)的厚度
android:thicknessRatio浮點(diǎn)型疾党,以環(huán)的寬度比率來(lái)表示環(huán)的厚度,默認(rèn)為9惨奕,表示環(huán)的厚度為環(huán)的寬度除以9雪位,該值會(huì)被android:thickness覆蓋
android:useLevel一般為false,否則可能環(huán)形無(wú)法顯示梨撞,只有作為L(zhǎng)evelListDrawable使用時(shí)才設(shè)為true
第一個(gè)圖只添加了solid雹洗;第二個(gè)圖只添加了gradient,類(lèi)型為sweep卧波;第三個(gè)圖只添加了stroke时肿;第四個(gè)圖添加了gradient和stroke兩項(xiàng)特性。
以下為第四個(gè)圖的代碼:
如果想讓這個(gè)環(huán)形旋轉(zhuǎn)起來(lái)幽勒,變成可用的進(jìn)度條嗜侮,則只要在shape外層包多一個(gè)rotate元素就可以了港令。
結(jié)尾
shape篇就講到這里了啥容,代碼也已經(jīng)放上github,地址: