Drawable有很多種,它們都表示一種圖像的概念雨让,但它們又不全是圖片,通過(guò)顏色也可以構(gòu)造出各式各樣的圖像的效果厘灼。一般來(lái)說(shuō)夹纫,Drawable是沒(méi)有大小概念的,當(dāng)用作View的背景時(shí)设凹,Drawable會(huì)被拉伸至View的同等大小舰讹。
Android中常用的Drawable有:
1. BitmapDrawable
—— 表示一張圖片
<bitmap
xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@[package:]drawable/drawable_resource"
android:antialias=["true"|"false"]
android:dither=["true"|"false"]
android:filter=["true"|"false"]
android:gravity=["top"|"bottom"|"left"|"right"|"center_vertical"
|"fill_vertical"|"center_horizontal"|"fill_horizontal"
|"center"|"fill"|"clip_vertical"|"clip_horizontal"]
android:mipMap=["true"|"false"]
android:titleMode=["disabled"|"clamp"|"repeat"|"mirror"]
/>
- android:src
圖片的資源id - android:antialias
是否開(kāi)啟圖片抗鋸齒功能,能讓圖片變平滑闪朱,同時(shí)也會(huì)在一定程度上降低圖片清晰度(可以忽略) - android:dither
是否開(kāi)啟圖片抖動(dòng)效果月匣,讓高質(zhì)量的圖片在低質(zhì)量的屏幕上還能保持較好的顯示效果 - android:filter
是否開(kāi)啟過(guò)濾效果钻洒,當(dāng)圖片被拉伸或者被壓縮時(shí),可以保持較好的顯示效果 - android:gravity
當(dāng)圖片小于容器尺寸時(shí)锄开,設(shè)置此選項(xiàng)對(duì)圖片進(jìn)行定位 - android:mipMap
紋理映射素标,圖像相關(guān)處理技術(shù),默認(rèn)值為false(不常用) - android:titleMode
設(shè)置平鋪模式萍悴,默認(rèn)disabled头遭,repeat表示簡(jiǎn)單的水平和豎直方向上的平鋪效果;mirror表示水平和豎直方向上的鏡面投影效果癣诱;clamp將圖片四周的像素?cái)U(kuò)展到周圍區(qū)域
2. ShapeDrawable
—— 通過(guò)顏色來(lái)構(gòu)造的圖形
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape=["rectangle"|"oval"|"line"|"ring"]>
<corners
android:radius="integer"
android:topLeftRadius="integer"
android:topRightRadius="integer"
android:bottomLeftRadius="integer"
android:bottomRightRadius="integer"/>
<gradient
android:angle="integer"
android:centerX="integer"
android:centerY="integer"
android:centerColor="color"
android:endColor="color"
android:gradientRadius="integer"
android:startColor="color"
android:type=["linear"|"radial"|"sweep"]
android:useLevel=["true"|"false"]/>
<padding
android:left="integer"
android:top="integer"
android:right="integer"
android:bottom="integer"/>
<size
android:width="integer"
android:height="integer"/>
<solid
android:color="color"/>
<stroke
android:width="integer"
android:color="color"
android:dashWidth="integer"
android:dashGrap="integer"/>
<shape/>
android:shape
表示圖形的形狀计维,rectangle(矩形)、oval(橢圓)撕予、line(橫線)和ring(圓環(huán))<corners>
表示shape四個(gè)角的角度<gradient>
表示shape的漸變效果鲫惶,angle是漸變角度,centerX是漸變中心點(diǎn)的橫坐標(biāo)实抡,centerY是漸變中心點(diǎn)的縱坐標(biāo)欠母,startColor是漸變的起始色,centerColor是漸變的中間色澜术,endColor是漸變的結(jié)束色艺蝴,gradientRadius是漸變半徑,type為漸變的類別<solid>
表示純色填充<stroke>
Shape的描邊鸟废,dashWidth是組成虛線的線段的寬度猜敢,dashGap是組成虛線的線段間的間隔
用途:如畫出帶有圓角的按鈕
3. LayerDrawable
—— 表示一種層次化得Drawable集合,通過(guò)將不同的Drawable放在不同的層上面從而達(dá)到一種疊加后的效果
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@[package:]drawable/drawable_resource"
android:id="@[+][package:]id/resource_name"
android:top="dimension"
android:right="dimension"
android:bottom="dimension"
android:left="dimension"/>
<item
android:drawable="@[package:]drawable/drawable_resource"
android:id="@[+][package:]id/resource_name"
android:top="dimension"
android:right="dimension"
android:bottom="dimension"
android:left="dimension"/>
......
<layer-list/>
用途:如畫出背景只有下劃線的EditText(實(shí)現(xiàn)原理:將帶有界面背景顏色的層覆蓋在帶有EditText下劃線顏色的層上面盒延,再設(shè)置bottom屬性)
4. StateListDrawable
—— 表示的也是一種Drawable集合缩擂,每個(gè)Drawable對(duì)應(yīng)著View的一種狀態(tài),系統(tǒng)會(huì)根據(jù)View的狀態(tài)來(lái)選擇合適的Drawable
<selector
xmlns:android="http://schemas.android.com/apk/res/android"
android:constantSize=["true"|"false"]
android:dither=["true"|"false"]
android:variablePadding=["true"|"false"]>
<item
android:drawable="@[package:]drawable/drawable_resource"
android:state_pressed=["true"|"false"]
android:state_focused=["true"|"false"]
android:state_hovered=["true"|"false"]
android:state_selected=["true"|"false"]
android:state_checked=["true"|"false"]
android:state_enabled=["true"|"false"]
android:state_activated=["true"|"false"]/>
<item
android:drawable="@[package:]drawable/drawable_resource"
android:state_pressed=["true"|"false"]
android:state_focused=["true"|"false"]
android:state_hovered=["true"|"false"]
android:state_selected=["true"|"false"]
android:state_checked=["true"|"false"]
android:state_enabled=["true"|"false"]
android:state_activated=["true"|"false"]/>
......
<selector/>
android:constantSize
決定StateListDrawable的大小是否隨著其狀態(tài)的改變而改變添寺,true的話則表示保持不變胯盯,固有大小為所以drawable的最大值,false則會(huì)隨著狀態(tài)的改變而改變计露,默認(rèn)是為falseandroid:dither
是否開(kāi)啟抖動(dòng)效果android:variablePadding
決定StateListDrawable的padding是否隨著其狀態(tài)的改變而改變博脑,true的話則表示保持不變,固有大小為所以drawable的padding的最大值票罐,false則會(huì)隨著狀態(tài)的改變而改變叉趣,默認(rèn)是為false
用途:如實(shí)現(xiàn)按鈕按下與松開(kāi)時(shí)候的不同效果
5. LevelListDrawable
—— 表示的也是一種Drawable集合,每個(gè)Drawable都要一個(gè)等級(jí)(level)概念该押,系統(tǒng)會(huì)根據(jù)不同的等級(jí)切換不同的drawable
<level-list
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@[package:]drawable/drawable_resource"
android:maxlevel="integer"
android:minlevel="integer"/>
<item
android:drawable="@[package:]drawable/drawable_resource"
android:maxlevel="integer"
android:minlevel="integer"/>
......
<level-list/>
每個(gè)item對(duì)應(yīng)一個(gè)Drawable疗杉,并且有相應(yīng)的等級(jí)范圍,在minlevel和maxlevel之間的等級(jí)會(huì)對(duì)應(yīng)此item中的Drawable
用途:如構(gòu)造狀態(tài)切換按鈕
當(dāng)然還有TransitionDrawable蚕礼、InsetDrawable烟具、ScaleDrawable和ClipDrawable等梢什,就不一一介紹了,這里只介紹一些常用的朝聋,有興趣的同學(xué)可以繼續(xù)深入了解嗡午,哈哈哈。