神奇的Drawable文件夾---背景圖篇

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)

填充顏色的圓環(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>

效果如下:

LayerDrawable

七棕叫、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ú)邊界的波紋效果瘟滨,添加后為有邊界。

波紋點(diǎn)擊效果

參考博文:

領(lǐng)略千變?nèi)f化的Android Drawable (一)

領(lǐng)略千變?nèi)f化的Android Drawable (二)

Android樣式的開(kāi)發(fā):drawable匯總篇

參考視頻教程:

[慕課網(wǎng)]Android的各種Drawable講解

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末能颁,一起剝皮案震驚了整個(gè)濱河市杂瘸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌伙菊,老刑警劉巖败玉,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異占业,居然都是意外死亡绒怨,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)谦疾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)南蹂,“玉大人,你說(shuō)我怎么就攤上這事念恍×” “怎么了晚顷?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)疗疟。 經(jīng)常有香客問(wèn)我该默,道長(zhǎng),這世上最難降的妖魔是什么策彤? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任栓袖,我火速辦了婚禮,結(jié)果婚禮上店诗,老公的妹妹穿的比我還像新娘裹刮。我一直安慰自己,他們只是感情好庞瘸,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布捧弃。 她就那樣靜靜地躺著,像睡著了一般擦囊。 火紅的嫁衣襯著肌膚如雪违霞。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,144評(píng)論 1 285
  • 那天瞬场,我揣著相機(jī)與錄音买鸽,去河邊找鬼。 笑死贯被,一個(gè)胖子當(dāng)著我的面吹牛癞谒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播刃榨,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼弹砚,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了枢希?” 一聲冷哼從身側(cè)響起桌吃,我...
    開(kāi)封第一講書(shū)人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎苞轿,沒(méi)想到半個(gè)月后茅诱,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡搬卒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年瑟俭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片契邀。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡摆寄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情微饥,我是刑警寧澤逗扒,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站欠橘,受9級(jí)特大地震影響矩肩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜肃续,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一黍檩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧始锚,春花似錦建炫、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)艺配。三九已至察郁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間转唉,已是汗流浹背皮钠。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赠法,地道東北人麦轰。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像砖织,于是被迫代替她去往敵國(guó)和親款侵。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,521評(píng)論 25 707
  • ¥開(kāi)啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開(kāi)一個(gè)線程侧纯,因...
    小菜c閱讀 6,358評(píng)論 0 17
  • 轉(zhuǎn)載自Keegan小鋼并標(biāo)明原文鏈接:http://keeganlee.me/post/android/20150...
    堅(jiān)持編程_lyz閱讀 1,112評(píng)論 0 1
  • 概述 今天我們來(lái)探究一下android的樣式新锈。其實(shí),幾乎所有的控件都可以使用 background屬性去引用自定義...
    CokeNello閱讀 4,813評(píng)論 1 19
  • 周末就這么被睡過(guò)去了眶熬,雖說(shuō)不睡到自然醒是對(duì)周末的不敬妹笆,但是總感覺(jué)時(shí)間就這么流失還是有點(diǎn)罪惡感。 每周一起來(lái)都是滿(mǎn)滿(mǎn)...
    壞壞de_L閱讀 95評(píng)論 0 0