日常開發中,我們會遇到一些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屬性以及子標簽的屬性全部介紹完畢。
下面讓我們看一下,實際應用時候的注意事項
畫虛線時,有幾點特性必須要知道的:
-
- 只能畫水平線,畫不了豎線;
- 線的高度是通過stroke的android:width屬性設置的;
- size的android:height屬性定義的是整個形狀區域的高度;(前提是控件view沒有設置layout_height屬性值,即為wrap_content)
- size的height必須大於stroke的width,否則,線無法顯示;(與3同前提,否則就是size的height必須大於控件的height)
- 線在整個形狀區域中是居中顯示的;
- 線左右兩邊會留有空白間距,線越粗,與stroke的dashWidth的值相關。
- 引用虛線的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