Android開(kāi)發(fā)中,和布局文件對(duì)應(yīng) View 一樣,Drawable 文件也對(duì)應(yīng)著一個(gè)類(lèi)--Drawable。
如下面兩個(gè)表所示。
節(jié)點(diǎn) | View 類(lèi) | 類(lèi)型 |
---|---|---|
LinearLayout | android.widget.LinearLayout | ViewGroup |
TextView | android.widget.TextView | View |
Button | android.widget.Button | View |
... | ... | ... |
假設(shè)在布局文件的根布局使用了 LinearLayout , 里面包含了一個(gè) TextView 和 一個(gè) Button砌烁,隨后在 Activity 中使用 setContentView(R.layout.main);
或者使用 LayoutInflater.from(mContext).inflate(R.id.main, null, false);
來(lái)加載 view,Android 會(huì)把布局文件中的每個(gè)節(jié)點(diǎn)都轉(zhuǎn)換對(duì)應(yīng)的類(lèi),組合成一個(gè)新的 view函喉,用在 Activity 背景上或者得到這個(gè) view做其他的操作避归。
下面來(lái)看今天的主題---Drawable,以布局文件來(lái)類(lèi)比管呵。
序號(hào) | 節(jié)點(diǎn) | Drawable 具體子類(lèi) | 說(shuō)明 |
---|---|---|---|
1 | [bitmap] | BitmapDrawable | 對(duì)bitmap的封裝 |
2 | [color] | ColorDrawable | 把顏色封裝成可以顯示的Drawable |
3 | [shape] | ShapeDrawable | 繪制基礎(chǔ)的形狀圖形梳毙,最常用的Drawable之一,可用于定義圓角捐下、漸變色摸袁、圓環(huán)等效果 |
4 | [selector] | StateListDrawable | 表示一組有狀態(tài)的圖像的集合蹂午,可用于給button等設(shè)置點(diǎn)擊和正常狀態(tài)下的圖片 |
5 | [level-list] | LevelListDrawable | 表示一組有等級(jí)的圖像的集合 |
6 | [layer-list] | LayerDrawable | 表示圖層 |
7 | [nine-patch] | NinePatchDrawable | 對(duì).9.png的封裝 |
8 | [clip] | ClipDrawable | 對(duì)drawable裁剪 |
9 | [inset] | InsetDrawable | 用距離邊框的距離表示drawable大小 |
10 | [ripple] | RippleDrawable | 波紋點(diǎn)擊效果侧蘸,API21以上 |
下面看怎樣在xml文件中使用這些 Drawable配名,當(dāng)然和布局文件中的 view 一樣,我們也可以使用java代碼來(lái)創(chuàng)建這些對(duì)象婴程,但是我們一般不這樣做廓奕,就像我們不會(huì)用java代碼創(chuàng)建一個(gè)復(fù)雜的布局一樣。
一档叔、BitmapDrawable
在 drawable 文件夾下創(chuàng)建一個(gè)xml文件桌粉,修改 <selector/>
根節(jié)點(diǎn)為 <bitmap/>
,并且增加 src 屬性衙四,像下面這樣:
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ic_launcher">
</bitmap>
這樣铃肯,我們就可以在文件文件中設(shè)置 view 的背景 android:background="@drawable/bitmap"
,bitmap 就這么簡(jiǎn)單传蹈,我們一般也不會(huì)這樣來(lái)用缘薛,使用的話也是配合別的 Drawable,用于包裝圖片資源卡睦,比如在 StateListDrawable(selector節(jié)點(diǎn))下,對(duì)應(yīng)每一個(gè)drawable 設(shè)置不同的 BitmapDrawable漱抓。
bitmap 節(jié)點(diǎn)下不能再包含節(jié)點(diǎn)表锻。
所有的設(shè)置都通過(guò)屬性來(lái)完成。
下表列出所有的屬性供參考乞娄。
屬性 | 參數(shù)類(lèi)型 | 說(shuō)明 |
---|---|---|
android:src | Drawable resource | 顯示的圖片瞬逊,不能為color等,只能為圖片資源 |
android:alpha | float | 透明度0-1仪或,值越小确镊,越透明 |
android:antialias | boolean | 是否開(kāi)啟抗鋸齒 |
android:autoMirrored | boolean | 設(shè)置圖片是否需要鏡像反轉(zhuǎn),當(dāng)布局方向是RTL范删,即從右到左布局時(shí)才有用蕾域,API19以上 |
android:dither | boolean | 是否抖動(dòng) |
android:filter | boolean | 設(shè)置是否允許對(duì)圖片進(jìn)行濾波 |
android:gravity | center... | 圖片對(duì)其方式,同布局文件中view的gravity屬性 |
android:mipMap | boolean | 設(shè)置是否可以使用mipmap API18以上 |
android:tileMode | disabled、mirror旨巷、clamp巨缘、repeat | X、Y軸平鋪方式采呐, disabled(默認(rèn)):不使用平鋪若锁;mirror:鏡面;clamp:復(fù)制圖片邊緣的顏色來(lái)填充容器剩下的空白部分斧吐;repeat:圖片重復(fù)鋪滿(mǎn) |
android:tileModeX | 同上 | X軸平鋪方式又固,參數(shù)意義同上 |
android:tileModeY | 同上 | Y軸平鋪方式,參數(shù)意義同上 |
android:tint | color | 給圖片著色 |
android:tintMode | add煤率、multiply仰冠、screen、src_atop涕侈、src_in沪停、src_over | 著色模式 |
二、ColorDrawable
ColorDrawable 對(duì)應(yīng)xml文件中的 <color/>
節(jié)點(diǎn)裳涛,同樣在 drawable 文件夾下新建一個(gè)xml文件木张,內(nèi)容如下:
<?xml version="1.0" encoding="utf-8"?>
<color xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/colorAccent">
</color>
color 節(jié)點(diǎn)只有唯一一個(gè)也是必須的屬性,android:color
使用color資源文件中的color賦值即可端三。同樣沒(méi)有子節(jié)點(diǎn)舷礼,最為簡(jiǎn)單的一個(gè)Drawable,把color 值轉(zhuǎn)化為了Drawable對(duì)象郊闯,以便在其他需要Drawable的地方使用妻献。
三、ShapeDrawable
使用 <shape/>
節(jié)點(diǎn)用來(lái)定義形狀团赁,可以定義矩形育拨、橢圓、線欢摄、圓環(huán)四種類(lèi)型的形狀熬丧。shape 節(jié)點(diǎn)包含一些屬性和子節(jié)點(diǎn):
屬性:
屬性 | 參數(shù)類(lèi)型 | 說(shuō)明 |
---|---|---|
android:shape | rectangle、oval怀挠、line析蝴、ring | 定義形狀的類(lèi)型,rectangle(矩形)绿淋、oval(橢圓)闷畸、line(線)、ring(圓環(huán))默認(rèn)為矩形 |
android:innerRadius | int | 圓環(huán)內(nèi)圓的半徑 |
android:innerRadiusRatio | int | 內(nèi)半徑占整個(gè)Drawable寬度的比例吞滞,默認(rèn)值為9 |
android:thickness | int | 圓環(huán)的厚度 |
android:thicknessRatio | int | 厚度占整個(gè)Drawable寬度比例佑菩,默認(rèn)值為3 |
android:useLevel | boolean | 設(shè)置等級(jí),配合LevelListDrawable使用時(shí)設(shè)置 |
android:visible | boolean | 設(shè)置是否可見(jiàn) |
android:dither | boolean | 是否抖動(dòng) |
android:tint | color | 給圖片著色 |
android:tintMode | add、multiply倘待、screen疮跑、src_atop、src_in凸舵、src_over | 著色模式 |
子節(jié)點(diǎn):
solid 填充色
表示形狀的填充色祖娘,只有color一個(gè)屬性:android:color
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/colorAccent"/>
</shape>
填充顏色的矩形.png
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="@color/colorAccent"/>
</shape>
填充顏色的橢圓.png
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:innerRadius="50dp"
android:shape="ring"
android:thickness="10dp"
android:useLevel="false">
<solid android:color="@color/colorAccent"/>
</shape>
填充顏色的圓環(huán).png
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="line">
<stroke
android:width="4dp"
android:color="@color/colorAccent"
android:dashGap="8dp"
android:dashWidth="4dp"/>
</shape>
線.png
corners 圓角
表示圓角的半徑,對(duì)應(yīng)有四個(gè)角的屬性啊奄,和一個(gè)總體的屬性
屬性 | 參數(shù)類(lèi)型 | 說(shuō)明 |
---|---|---|
android:radius | int | 統(tǒng)一設(shè)置圓角半徑 |
android:bottomLeftRadius | int | 設(shè)置左下角圓角半徑 |
android:bottomRightRadius | int | 設(shè)置右下角圓角半徑 |
android:topLeftRadius | int | 設(shè)置左上角圓角半徑 |
android:topRightRadius | int | 設(shè)置右上角圓角半徑 |
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners
android:bottomLeftRadius="3dp"
android:radius="5dp"/>
<solid android:color="@color/colorAccent"/>
<size
android:width="30dp"
android:height="30dp"/>
</shape>
圓角.png
gradient 漸變色
表示漸變色渐苏,可以設(shè)置形狀填充的顏色為漸變色
屬性 | 參數(shù)類(lèi)型 | 說(shuō)明 |
---|---|---|
android:angle | int | 設(shè)置旋轉(zhuǎn)的角度,45的倍數(shù) |
android:startColor | color | 顏色變化的起始值 |
android:endColor | color | 顏色變化的結(jié)束值 |
android:centerColor | color | 中間的顏色 |
android:centerX | int | 漸變中心點(diǎn)的橫坐標(biāo) |
android:centerY | int | 漸變的中心點(diǎn)的縱坐標(biāo) |
android:gradientRadius | int | 漸變的梯度菇夸,當(dāng)android:type=”radial”有效 |
android:type | linear 琼富、 radial 、 sweep | 漸變類(lèi)別庄新,linear(線性)為默認(rèn)值鞠眉,radial(徑內(nèi)漸變),sweep(掃描漸變) |
android:useLevel | boolean | 設(shè)置等級(jí)择诈,配合LevelListDrawable使用時(shí)設(shè)置 |
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:type="sweep"
android:endColor="@color/colorAccent"
android:startColor="@color/colorPrimary"/>
<size
android:width="30dp"
android:height="30dp"/>
</shape>
漸變色.png
stroke 邊框
表示邊框械蹋。
屬性 | 參數(shù)類(lèi)型 | 說(shuō)明 |
---|---|---|
android:color | color | 邊框顏色 |
android:width | int | 邊框?qū)挾?/td> |
android:dashGap | int | 邊框虛線間隙大小 |
android:dashWidth | int | 邊框虛線每個(gè)小節(jié)的寬度 |
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<stroke
android:width="2dp"
android:color="@color/colorAccent"
android:dashGap="2dp" // 和dashWidth一起設(shè)置,若不設(shè)置則為實(shí)線
android:dashWidth="3dp"/>
<size
android:width="30dp"
android:height="30dp"/>
</shape>
虛線邊框.png
size 大小
設(shè)置背景大小羞芍,width和height倆屬性哗戈。一般來(lái)說(shuō)這個(gè)值不是shape的最終顯示大小,因?yàn)閟hape作為背景時(shí)會(huì)根據(jù)View的大小而填充其背景荷科,因此Shape的大小很多時(shí)候是View的大小決定的唯咬。
padding 內(nèi)邊距
表示內(nèi)容或子標(biāo)簽邊距,4個(gè)屬性top畏浆、bottom胆胰、left、right刻获,需要注意的是這個(gè)標(biāo)簽的作用是為內(nèi)容設(shè)置與當(dāng)前應(yīng)用此shape的View的邊距煮剧,而不是設(shè)置當(dāng)前View與父元素的邊距。
四将鸵、StateListDrawable
StateListDrawable 對(duì)應(yīng) drawable 文件夾下的xml文件的 <selector/>
節(jié)點(diǎn),表示drawable集合佑颇。selector 可以包含不止一個(gè) item 節(jié)點(diǎn)顶掉,每個(gè) item 節(jié)點(diǎn)對(duì)應(yīng)兩類(lèi)屬性,一類(lèi)只有一個(gè) android:drawable
挑胸, 另一類(lèi)是類(lèi)似于 android:state_pressed
痒筒,表示當(dāng)前所在view的狀態(tài),有按下、選擇簿透、獲得焦點(diǎn)等十幾種狀態(tài)移袍,需要注意不是每一個(gè)view都有這么多狀態(tài)。
最常見(jiàn)的場(chǎng)景是給 Button 設(shè)置點(diǎn)擊和正常狀態(tài)下的drawable老充。
selector 節(jié)點(diǎn) 屬性:
屬性 | 參數(shù)類(lèi)型 | 說(shuō)明 |
---|---|---|
android:autoMirrored | boolean | 設(shè)置圖片是否需要鏡像反轉(zhuǎn) |
android:constantSize | boolean | 設(shè)置自身大小是否隨著其狀態(tài)改變而改變 |
android:enterFadeDuration | int | 狀態(tài)改變時(shí)葡盗,新?tīng)顟B(tài)展示時(shí)的淡入時(shí)間,以毫秒為單位 |
android:exitFadeDuration | int | 狀態(tài)改變時(shí)啡浊,新?tīng)顟B(tài)消失時(shí)的淡入時(shí)間觅够,以毫秒為單位 |
android:variablePadding | boolean | padding是否隨狀態(tài)的改變而改變,默認(rèn)false |
子節(jié)點(diǎn) item 屬性:
屬性 | 參數(shù)類(lèi)型 | 說(shuō)明 |
---|---|---|
android:drawable | drawable | 對(duì)應(yīng)drawable巷嚣,可以為color喘先、bitmap、shape等單一drawable |
android:android:state_xxx | boolean | 設(shè)置不同的狀態(tài) |
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/button_press"
android:state_pressed="true"/>
<item android:drawable="@color/button_norm"
android:state_pressed="false"/>
</selector>
子節(jié)點(diǎn) item 還可以包含許多子節(jié)點(diǎn)廷粒,如bitmap窘拯、shape、color坝茎、動(dòng)畫(huà)相關(guān)的等涤姊,下面給出兩個(gè)例子說(shuō)明用法。
在布局文件中給view設(shè)置 android:background="@drawable/button_seleter"
即可景东,實(shí)現(xiàn)在點(diǎn)擊view時(shí)顯示不同的背景圖砂轻,有點(diǎn)擊的效果反饋。
這里需要注意一點(diǎn):
如果上邊所說(shuō)的view是 Button 的話斤吐,直接可以看到效果搔涝,但是,實(shí)際開(kāi)發(fā)中和措,我們可能要給 LinearLayout庄呈、TextView 設(shè)置點(diǎn)擊效果,使用上面的方法是沒(méi)有效果的派阱。
解決方法:給這個(gè) view 添加點(diǎn)擊事件的監(jiān)聽(tīng)诬留。
上邊代碼中的 android:drawable
不只可以設(shè)置為color類(lèi)型的drawable,還可以設(shè)置為bitmapDarwable贫母、ShapeDrawable等文兑,下面看一個(gè)圓角點(diǎn)擊效果的例子。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="false">
<shape>
<corners android:radius="10dp"/>
<solid android:color="@color/button_norm"/>
</shape>
</item>
<item android:state_pressed="true">
<shape>
<corners android:radius="10dp"/>
<solid android:color="@color/button_press"/>
</shape>
</item>
</selector>
設(shè)置在view上的效果為有圓角效果腺劣,并且按下的時(shí)候绿贞,背景后改變。
以上代碼在 selector 節(jié)點(diǎn)下有兩個(gè) item 節(jié)點(diǎn)橘原,item節(jié)點(diǎn)設(shè)置了是否點(diǎn)擊的狀態(tài)籍铁,并且包含了一個(gè) shape 節(jié)點(diǎn)涡上,作為對(duì)應(yīng)狀態(tài)下的drawable對(duì)象。
五拒名、LevelListDrawable
LevelListDrawable 對(duì)應(yīng)xml文件中的 <level-list/>
節(jié)點(diǎn)吩愧,表示一組由等級(jí)大小標(biāo)志的 drawable,不同的等級(jí)可以為之設(shè)置不同的背景drawable增显。
此節(jié)點(diǎn)沒(méi)有參數(shù)雁佳,只能包含不止一個(gè)的 item 子節(jié)點(diǎn)。
item 節(jié)點(diǎn)的屬性:
屬性 | 參數(shù)類(lèi)型 | 說(shuō)明 |
---|---|---|
android:drawable | drawable | 對(duì)應(yīng)drawable甸怕,可以為color甘穿、bitmap、shape等單一drawable |
android:maxLevel | int | 設(shè)置等級(jí)范圍的最大值 |
android:minLevel | int | 設(shè)置等級(jí)范圍的最小值 |
<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@color/colorAccent"
android:maxLevel="10"
android:minLevel="1"/>
<item
android:drawable="@color/colorPrimary"
android:maxLevel="20"
android:minLevel="11"/>
</level-list>
簡(jiǎn)單起見(jiàn)梢杭,使用 ColorDrawable 來(lái)設(shè)置對(duì)應(yīng)的 android:drawable温兼,有兩種不同的背景,對(duì)應(yīng)都有不同的等級(jí)范圍武契。
設(shè)置給view 作為背景募判,像這樣:android:background="@drawable/level"
。
在java代碼中咒唆,獲取到此view的 background届垫,再設(shè)置其level屬性的值,就會(huì)變?yōu)閷?duì)應(yīng)等級(jí)的背景全释。
boolean flag;
public void onClick(View v) {
if (flag) {
view.getBackground().setLevel(3);
} else {
view.getBackground().setLevel(13);
}
this.flag = !this.flag;
}
六装处、LayerDrawable
LayerDrawable 也表示 drawable 集合,對(duì)應(yīng)xml文件中的<layer-list/>
節(jié)點(diǎn)浸船,根據(jù)名稱(chēng)我們可以知道其中的每一個(gè) drawable 都代表一個(gè)圖層妄迁,新加入的 drawable 位于背景圖片的最高圖層。
item 的 android:drawable 屬性也是可以設(shè)置為復(fù)雜的drawable的李命,方便起見(jiàn)登淘,這里使用 colorDrawable。
屬性 | 參數(shù)類(lèi)型 | 說(shuō)明 |
---|---|---|
android:opacity | transparent封字、translucent黔州、opaque | 設(shè)置透明度:transparent透明、translucent半透明阔籽、opaque不透明 |
android:paddingXxx | int | 設(shè)置等級(jí)范圍的最大值 |
子節(jié)點(diǎn) item 屬性流妻,都是定位的屬性,像height笆制,width绅这,gravity,bottom项贺,top君躺,left,right等开缎。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:bottom="10dp"
android:drawable="@color/colorAccent"
android:left="10dp"
android:right="10dp"
android:top="10dp"
/>
<item
android:bottom="50dp"
android:drawable="@color/colorPrimary"
android:left="50dp"
android:right="50dp"
android:top="50dp"
/>
</layer-list>
效果如下:
七棕叫、NinePatchDrawable
NinePatchDrawable 是點(diǎn)九圖的封裝,xml文件中對(duì)應(yīng) <nine-patch/>
標(biāo)簽奕删,屬性和BitmapDrawable中屬性的含義相同俺泣。
<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/btn_bk"
android:dither="true"/>
八、ClipDrawable
ClipDrawable 代表可以裁剪的drawable完残,對(duì)應(yīng)xml文件中的<clip/>
標(biāo)簽伏钠,通過(guò)當(dāng)前設(shè)置的比例來(lái)裁剪Drawable,ClipDrawable的setLevel()方法可以控制顯示比例谨设,ClipDrawable的level值范圍在[0,10000]熟掂,level的值越大裁剪的內(nèi)容越少,當(dāng)level為10000時(shí)則完全顯示扎拣,而0表示完全裁剪赴肚,不可見(jiàn)。
<clip/>
標(biāo)簽的屬性:
屬性 | 參數(shù)類(lèi)型 | 說(shuō)明 |
---|---|---|
android:drawable | drawable | 對(duì)應(yīng)drawable二蓝,可以為color誉券、bitmap、shape等單一drawable |
android:clipOrientation | horizontal刊愚、vertical | 裁剪的方向踊跟,horizontal水平、vertical垂直 |
android:gravity | right鸥诽、top等 | 設(shè)置drawable所在位置商玫,配合android:clipOrientation 屬性一起用 |
android:gravity 可以設(shè)置下表所示的值:
屬性 | 描述說(shuō)明 |
---|---|
top | 將這個(gè)對(duì)象放在容器的頂部,不改變其大小衙传。當(dāng)clipOrientation 是”vertical”决帖,裁剪從底部開(kāi)始 |
bottom | 將這個(gè)對(duì)象放在容器的底部,不改變其大小蓖捶。當(dāng)clipOrientation 是”vertical”地回,裁剪從頂部開(kāi)始 |
left | 將這個(gè)對(duì)象放在容器的左部,不改變其大小俊鱼。當(dāng)clipOrientation 是 “horizontal”刻像,裁剪從drawable的右邊(right)開(kāi)始,默認(rèn)值 |
right | 將這個(gè)對(duì)象放在容器的右部并闲,不改變其大小细睡。當(dāng)clipOrientation 是 “horizontal”,裁剪從drawable的左邊(left)開(kāi)始 |
center | 將這個(gè)對(duì)象放在水平垂直坐標(biāo)的中間帝火,不改變其大小溜徙。當(dāng)clipOrientation 是 “horizontal”裁剪發(fā)生在左右湃缎。當(dāng)clipOrientation是”vertical”,裁剪發(fā)生在上下。 |
center_vertical | 將對(duì)象放在垂直中間蠢壹,不改變其大小嗓违,如果clipOrientation 是 “vertical”,那么從上下同時(shí)開(kāi)始裁剪 |
center_horizontal | 將對(duì)象放在水平中間图贸,不改變其大小蹂季,clipOrientation 是 “horizontal”,那么從左右兩邊開(kāi)始裁剪 |
fill | 填充整個(gè)容器疏日,不會(huì)發(fā)生裁剪偿洁。(除非drawable的level是 0,才會(huì)不可見(jiàn)沟优,表示全部裁剪完)涕滋。 |
fill_vertical | 垂直方向上不發(fā)生裁剪。(除非drawable的level是 0净神,才會(huì)不可見(jiàn)何吝,表示全部裁剪完) |
fill_horizontal | 水平方向上不發(fā)生裁剪。(除非drawable的level是 0鹃唯,才會(huì)不可見(jiàn)爱榕,表示全部裁剪完) |
clip_vertical | 附加選項(xiàng),表示豎直方向的裁剪坡慌,很少使用 |
clip_horizontal | 附加選項(xiàng)黔酥,表示水平方向的裁剪,很少使用 |
<?xml version="1.0" encoding="utf-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android"
android:clipOrientation="horizontal"
android:drawable="@drawable/ic_launcher"
android:gravity="right">
</clip>
上邊代碼定義了一個(gè) ClipDrawable 對(duì)象洪橘,設(shè)置進(jìn)行水平方向裁剪跪者,并且從左邊開(kāi)始裁剪。drawable為app啟動(dòng)圖標(biāo)熄求。
在布局文件的view中使用像 android:background="@drawable/clip"
代碼來(lái)使用上邊定義的 ClipDrawable渣玲。
在java代碼中,通過(guò)設(shè)置 ClipDrawble 的 level 屬性的值弟晚,來(lái)進(jìn)行圖片背景的裁剪忘衍。
linearLayout = (LinearLayout) findViewById(R.id.lll);
linearLayout.getBackground().setLevel(5000); // 裁剪一半,0~10000
效果如下圖:
九卿城、InsetDrawable
InsetDrawable 用距離邊框的距離表示drawable大小枚钓,比如我們需要讓view的背景不是完全填充這個(gè)view,并且需要一定的距離瑟押,就可以使用 InsetDrawable 來(lái)完成搀捷。InsetDrawable 對(duì)應(yīng)xml文件中的 <inset/>
標(biāo)簽。
屬性:
屬性 | 參數(shù)類(lèi)型 | 說(shuō)明 |
---|---|---|
android:drawable | drawable | 對(duì)應(yīng)drawable多望,可以為color嫩舟、bitmap氢烘、shape等單一drawable |
android:inset | dimen | 統(tǒng)一設(shè)置距離邊框的距離 |
android:insetTop | dimen | 設(shè)置距容器上邊的距離 |
android:insetBottom | dimen | 設(shè)置距容器下邊的距離 |
android:insetLeft | dimen | 設(shè)置距容器左邊的距離 |
android:insetRight | dimen | 設(shè)置距容器右邊的距離 |
android:visible | boolean | 設(shè)置是否可見(jiàn) |
<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@color/colorAccent"
android:inset="10dp">
</inset>
十、RippleDrawable
RippleDrawable 可以在Android5.0 即 API21 以上實(shí)現(xiàn)波紋點(diǎn)擊效果家厌,對(duì)應(yīng)xml文件中的 <ripple/>
標(biāo)簽威始。由于此標(biāo)簽必須在API21以上才可以使用,我們也不能設(shè)置 minSdkVersion
為21像街,畢竟要適配更多的API版本,我們可以在建立一個(gè) drawable-v21
的文件夾晋渺,在里面新建一個(gè)xml文件即可镰绎。
在Android studio中,就更方便了木西,選中 Drawable 文件夾--->右鍵--->選擇new--->單擊 Drawable resource file 選項(xiàng)畴栖,就來(lái)到了如下對(duì)話框:
填寫(xiě)文件名,選擇最后一個(gè)Version八千,單擊中間的表示向右的按鈕吗讶,填寫(xiě)21,點(diǎn)擊ok恋捆,就會(huì)自動(dòng)生成對(duì)應(yīng)文件和新建文件照皆。
<ripple/>
標(biāo)簽的屬性:
屬性 | 參數(shù)類(lèi)型 | 說(shuō)明 |
---|---|---|
android:color | color | 波紋的顏色,會(huì)覆蓋在背景上 |
android:radius | dimen | 圓角沸停,不太懂膜毁,設(shè)置大小效果都一樣 |
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/gray">
<!--有界-->
<item
android:id="@android:id/mask"
android:drawable="@color/gray"/>
</ripple>
需要注意的是 android:id="@android:id/mask"
,沒(méi)有設(shè)置時(shí)愤钾,是無(wú)邊界的波紋效果瘟滨,添加后為有邊界。
參考博文:
領(lǐng)略千變?nèi)f化的Android Drawable (一)
領(lǐng)略千變?nèi)f化的Android Drawable (二)
Android樣式的開(kāi)發(fā):drawable匯總篇
參考視頻教程: