Android:Drawable Resource的使用<一>之Shape屬性詳解

前言

本節(jié)內容主要講解drawable文件夾下Shape的使用而叼。

Shape主要是為了給控件背景設定一個形狀模庐,使UI看起來更加美觀芋浮。本實例以Android Studio為開發(fā)工具闪彼。在/app/src/main/res/drawable文件夾下新建drawable resource file,在選項Root element下輸入或選擇shape邻薯。

一、Shape根標簽

Shape根標簽為設置形狀屬性的標簽乘凸。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:dither="false|true"          
    android:innerRadius="dimension"
    android:innerRadiusRatio="float"
    android:shape="rectangle|line|oval|ring"
    android:thickness="dimension"
    android:thicknessRatio="float"
    android:tint="color"
    android:tintMode="src_in|src_atop|src_over|add|multiply|screen"
    android:useLevel="false|true"
    android:visible="false|true">
</shape>
  • dither:在位圖的像素配置與屏幕不同時啟用位圖的抖動厕诡;true開啟抖動,false停用抖動翰意。默認值為 true木人。
  • innerRadius:內環(huán)半徑,形狀為圓環(huán)時可用冀偶。只寫數字會報錯醒第,需要在后面在加上“px”或者“dp”。如果內圓環(huán)太大进鸠,超出控件的大小也會不顯示稠曼。
  • innerRadiusRatio:內環(huán)的比例(環(huán)的半徑/內環(huán)半徑),形狀為圓環(huán)時可用客年。默認為3霞幅,如果設置了innerRadius漠吻,那這個屬性不再生效。
  • shaperectangle矩形司恳、line線途乃、oval橢圓、ring環(huán)扔傅。默認為矩形rectangle耍共。
  • thickness:環(huán)的厚度,形狀為圓環(huán)時可用猎塞。
  • thicknessRatio:環(huán)的厚度比(環(huán)的半徑/環(huán)的厚度)试读,形狀為圓環(huán)時可用。默認為9荠耽。如果設置了thickness钩骇,那這個屬性不再生效。
  • tint給圓環(huán)著色铝量,只能在API 21及以上才能使用倘屹,否則沒有效果。
  • tintMode著色類型慢叨,只能在API 21及以上才能使用唐瀑,否則沒有效果。
  • useLevel:只有當shape使用在LevelListDrawable中的時候插爹,這個值為true哄辣,否則為false。這個屬性很少使用,一般別用就行赠尾。
  • visible:顧名思義力穗,可見性。true可見气嫁,false不可見当窗。默認為true

二寸宵、solid標簽

solid標簽為設置填充屬性的標簽崖面。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="color" />  
</shape>
  • color:填充顏色,此標簽只有這一個屬性梯影。

三巫员、corners標簽

corners標簽為設置圓角屬性的標簽。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@color/rosy_brown" />
    <corners android:radius="8dp"
        android:topLeftRadius="5dp"
        android:topRightRadius="10dp"
        android:bottomLeftRadius="15dp"
        android:bottomRightRadius="20dp"/>
</shape>
  • radius:圓角半徑甲棍,統(tǒng)一指定四個角的圓角半徑简识。后面單獨設定的圓角半徑會覆蓋radius
  • topLeftRadius:左上角的圓角半徑。
  • topRightRadius:右上角的圓角半徑七扰。
  • bottomLeftRadius:左下角的圓角半徑奢赂。
  • bottomRightRadius:右下角的圓角半徑。
    四個角的圓角半徑

四颈走、stroke標簽

stroke標簽為設置邊框屬性的標簽膳灶。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <stroke android:color="@color/green"
        android:dashWidth="3dp"
        android:dashGap="4dp"
        android:width="1dp"/>
</shape>
  • color:邊框顏色值,需要配合width屬性使用立由,否則沒有效果袖瞻。
  • width:邊框的寬度值。不設置顏色時拆吆,默認為黑色。
  • dashWidth:虛線每條小線段的長度脂矫。如果只是想顯示一條虛線枣耀,將shape根標簽的shape屬性改為 line
  • dashGap:小線段之間的間距庭再。
    邊框顏色為綠色捞奕,線段長度為3dp,間距4dp

五、size標簽

size標簽為設置大小屬性的標簽拄轻。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <size android:height="40dp" android:width="80dp" />
</shape>
  • width: 指定shape的寬度颅围。
  • height:指定shape的高度。

六恨搓、padding標簽

padding標簽為設置內邊距屬性的標簽院促。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <padding
        android:bottom="10dp"
        android:left="10dp"
        android:right="10dp"
        android:top="10dp" />
</shape>
  • bottom: 與底部的內邊距。在控件中設置padding屬性會覆蓋此屬性斧抱。
  • left:與左邊的內邊距常拓。在控件中設置padding屬性會覆蓋此屬性。
  • right:與右邊的內邊距辉浦。在控件中設置padding屬性會覆蓋此屬性弄抬。
  • top:與頂部的內邊距。在控件中設置padding屬性會覆蓋此屬性宪郊。

七掂恕、gradient標簽

gradient標簽為設置漸變屬性的標簽。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient
        android:angle="integer"
        android:centerColor="color"
        android:centerX="float"
        android:centerY="float"
        android:endColor="color"
        android:gradientRadius="dimension"
        android:startColor="color"
        android:type="linear|radial|sweep"
        android:useLevel="false|true" />
</shape>
  • angle:漸變角度弛槐。只能是45的整數倍懊亡,type屬性為linear時才有效。
  • centerColor:漸變過程中的顏色值乎串。
  • startColor:漸變起始的顏色值斋配。
  • endColor:漸變結束的顏色值。
  • centerX:漸變原點相對控件X坐標軸的值,默認為0.5艰争。
  • centerY:漸變原點相對控件Y坐標軸的值坏瞄,默認為0.5。
  • gradientRadius:漸變半徑甩卓,type屬性為radial時才有效
  • type:漸變類型鸠匀。linear線性漸變,radial放射漸變逾柿,sweep掃描漸變
  • useLevel:暫時別管它缀棍。

示例:

1、linear線性漸變

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient
        android:angle="0|45|90|135|180|225|270|315|360"
        android:centerColor="@color/brown"
        android:endColor="@color/red"
        android:startColor="@color/rosy_brown"
        android:type="linear" />
</shape>

漸變角度示例

可以看到隨著angle 的變化机错,漸變角度在逆時針變化,漸變方向指向控件的中心爬范。

  • 那么centerXcenterY 對線性漸變有什么影響呢?
    centerColor不存在時弱匪,centerXcenterY對漸變沒有任何影響青瀑。
    centerColor存在時,漸變起始顏色的寬度以centerX為準萧诫,如果centerX沒有定義斥难,則以centerY為準。
    angle = 45,centerX =0.1|0.5 |0.8時的效果圖

    通過上圖可以看到起始顏色值的范圍占比跟centerX 有關帘饶,如果centerX 不存在哑诊,則跟centerY 有關,跟 centerY = 0. 1|0.5|0.8 是一樣的效果及刻。

2镀裤、radial漸變

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient
        android:gradientRadius="20dp"
        android:centerX="0.5"
        android:centerY="0.5"
        android:centerColor="@color/brown"
        android:endColor="@color/red"
        android:startColor="@color/rosy_brown"
        android:type="radial" />
    <size android:width="40dp" android:height="40dp"/>
 </shape>

radial漸變,centerX=0.5,centerY=0.5

radial漸變缴饭,centerX=0.4,centerY=0.4

radial漸變是以控件的寬度centerX倍處為圓心的橫坐標淹禾,以控件高度的centerY倍處為圓心的縱坐標,以gradientRadius為半徑進行漸變茴扁。

3铃岔、sweep漸變

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient
        android:centerX="0.4"
        android:centerY="0.4"
        android:centerColor="@color/brown"
        android:endColor="@color/red"
        android:startColor="@color/rosy_brown"
        android:type="sweep" />
    <size android:width="40dp" android:height="40dp"/>
</shape>
掃描圓點默認在控件中心,從X軸正方向開始順時針方向開始漸變

八峭火、后言

如有問題毁习,歡迎留言交流。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末卖丸,一起剝皮案震驚了整個濱河市纺且,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌稍浆,老刑警劉巖载碌,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件猜嘱,死亡現(xiàn)場離奇詭異,居然都是意外死亡嫁艇,警方通過查閱死者的電腦和手機朗伶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來步咪,“玉大人论皆,你說我怎么就攤上這事』” “怎么了点晴?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長悯周。 經常有香客問我粒督,道長,這世上最難降的妖魔是什么禽翼? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任屠橄,我火速辦了婚禮,結果婚禮上捐康,老公的妹妹穿的比我還像新娘。我一直安慰自己庸蔼,他們只是感情好解总,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著姐仅,像睡著了一般花枫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上掏膏,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天劳翰,我揣著相機與錄音,去河邊找鬼馒疹。 笑死佳簸,一個胖子當著我的面吹牛,可吹牛的內容都是我干的颖变。 我是一名探鬼主播生均,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼腥刹!你這毒婦竟也來了马胧?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤衔峰,失蹤者是張志新(化名)和其女友劉穎佩脊,沒想到半個月后蛙粘,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡威彰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年出牧,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抱冷。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡崔列,死狀恐怖,靈堂內的尸體忽然破棺而出旺遮,到底是詐尸還是另有隱情赵讯,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布耿眉,位于F島的核電站边翼,受9級特大地震影響,放射性物質發(fā)生泄漏鸣剪。R本人自食惡果不足惜组底,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一康嘉、第九天 我趴在偏房一處隱蔽的房頂上張望淀弹。 院中可真熱鬧,春花似錦庸论、人聲如沸铛纬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽告唆。三九已至棺弊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間擒悬,已是汗流浹背模她。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留懂牧,地道東北人侈净。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像僧凤,于是被迫代替她去往敵國和親用狱。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內容