詳解Android中Drawable方法
本文為大家分享了Android中Drawable方法的詳細(xì)使用方法,供大家參考,具體內(nèi)容如下
1. BitmapDrawable相關(guān)方法:
新建在drawable目錄下面,示例如下:
<bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:antialias="true" android:dither="true" android:filter="true" android:gravity="center" android:mipMap="false" android:src="@drawable/ic_launcher" android:tileMode="disabled" />
具體每個(gè)屬性的解釋如下:
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
<!-- 圖片抗鋸齒效果,開(kāi)啟后會(huì)讓圖片變平滑,也可以在一定程度上降低圖片分辨率(幅度可忽略) -->
android:antialias="true"
<!-- 是否開(kāi)啟抖動(dòng)效果,開(kāi)啟這個(gè)選項(xiàng)可以染高質(zhì)量的圖片在低質(zhì)量的屏幕下還能較好的顯示 -->
android:dither="true"
<!-- 是否開(kāi)啟過(guò)濾,開(kāi)啟可以保持較好的顯示效果 -->
android:filter="true"
<!-- 圖片重力控制,可以控制圖片位置,也可以通過(guò)“|”來(lái)組合使用:
top 圖片放到頂部,不改變圖片大小
bottom 圖片放到底部,不改變大小
left 圖片放到左邊,不改變大小
right 圖片放到右邊,不改變大小
center_vertical 使圖片豎直居中,不改變大小
fill_vertical 圖片豎直方向充滿(mǎn)整個(gè)容器
center_horizontal 圖片水平方向居中,不改變圖片大小
fill_horizontal 圖片水平方向充滿(mǎn)
center 圖片中間居中
fill 圖片充滿(mǎn)容器,這個(gè)是默認(rèn)值
clip_vertical 附加選項(xiàng),表示豎直方向的裁剪,較少使用
clip_horizontal 附加選項(xiàng),便是水平方向的裁剪,較少使用
-->
android:gravity="center"
<!-- 紋理映射,一遍為false -->
android:mipMap="false"
<!-- 圖片的數(shù)據(jù)源 -->
android:src="@drawable/ic_launcher"
<!-- 有如下幾個(gè)值,對(duì)應(yīng)的方式如下:
disabled 默認(rèn)模式,關(guān)閉平鋪
repeat 加單的水平和豎直方向平鋪
mirror 一種在水平和豎直方向的鏡面投影效果
clamp 四周像素?cái)U(kuò)散到周?chē)鷧^(qū)域 -->
android:tileMode="disabled" />
上述的排版方式只是為了方便查看,不能直接復(fù)制到代碼中使用
2. ShapeDrawable,純色、漸變色的drawable
基本示例代碼:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners
android:bottomLeftRadius="1px"
android:bottomRightRadius="1px"
android:radius="2px"
android:topLeftRadius="1px"
android:topRightRadius="1px" />
<gradient
android:angle="5"
android:centerColor="#ff789434"
android:centerX="x"
android:centerY="y"
android:endColor="#34234324"
android:gradientRadius="55dp"
android:startColor="#ff783247"
android:type="linear"
android:useLevel="true" />
<padding
android:bottom="5dp"
android:left="5dp"
android:right="5dp"
android:top="5dp" />
<size
android:width="70dp"
android:height="70dp" />
<solid android:color="#fffff333" />
<stroke
android:width="30dp"
android:color="#33333333"
android:dashGap="4dp"
android:dashWidth="4dp" />
</shape>
各個(gè)標(biāo)簽詳細(xì)說(shuō)明:
<shape>表示圖像形狀
表示圖形形狀,有四個(gè)選項(xiàng)rectangle(矩形)、oval(橢圓)、line(橫線(xiàn))、ring(圓環(huán)),默認(rèn)是矩形。在使用line和ring時(shí)候需要通過(guò)stroke屬性來(lái)指定線(xiàn)的寬度和顏色,否則顯示效果將會(huì)異常。
當(dāng)設(shè)置ring時(shí),有五個(gè)特殊的屬性,對(duì)應(yīng)如下:
android:innerRadius——圓環(huán)內(nèi)半徑,和innerRadiusRatio同時(shí)存在時(shí),以innerRadius為準(zhǔn)。
android:thickness——圓環(huán)的厚度,及外半徑減去內(nèi)半徑
android:innerRAdiusRatio——內(nèi)半徑占整個(gè)drawable的寬度比例,默認(rèn)為9
android:thicknessRadio——厚度咱整個(gè)Drawable的比例,默認(rèn)為3,計(jì)算方式為厚度=寬度/n
android:useLevel——一般都應(yīng)該使用false,除非被當(dāng)做LevelListDrawable來(lái)使用時(shí)候
<corners>(四個(gè)角角度,適用于矩形)
表示shape的四個(gè)角的角度。它只試用與矩形,角度值的是圓角的程度,用px來(lái)表示。其中radius用來(lái)為四個(gè)角同意設(shè)置角度,優(yōu)先級(jí)比較低。topLeftRadius、topRightRadius、bottomLeftRadius、bottomRightRadius分別表示左上、右上、左下、右下角的角度。
<gradient>(顏色漸變)
表示漸變填充,它與標(biāo)簽互斥,包含的幾個(gè)屬性值意義如下:
android:angle——漸變角度,默認(rèn)為零,值必須為45的倍數(shù)。
android:centerX——漸變中心點(diǎn)橫坐標(biāo)
android:centerY——漸變中心點(diǎn)縱坐標(biāo)
android:startColor——漸變起始顏色
android:centerColor——漸變的中間色
android:endColor——漸變的結(jié)束色
android:gradientRadius——漸變半徑
android:useLevel——一般為false,僅當(dāng)android:type=”radial”
android:type——漸變的類(lèi)型,有個(gè)linear(線(xiàn)性漸變)、radial(徑向漸變)、sweep(掃描線(xiàn)漸變)三種,其中默認(rèn)為線(xiàn)性漸變
<solid>(純色填充)
通過(guò)android:color既可指定shape中填充的顏色
<stroke>(描邊屬性)
包含以下常用標(biāo)簽:
android:width——描邊的寬度,越大則shape的邊緣就會(huì)看起來(lái)越粗
android:color——描邊的顏色
android:dashWidth——組成虛線(xiàn)的線(xiàn)段的寬度
android:dashGap——組成虛線(xiàn)的線(xiàn)段之間的間隔,間隔越大空隙越大
<padding>內(nèi)邊距
可以理解為內(nèi)邊距,使用起來(lái)和直接在view中加邊距類(lèi)似包含四個(gè)屬性:android:top、android:bottom、android:left和android:right,分別表示上下左右內(nèi)邊距。
<size>
有兩個(gè)屬性android:width和android:height,表示該view的寬高,類(lèi)似圖片本身的寬高,在view中會(huì)視情況拉伸。
3. LayerDrawable層次化的Drawable,類(lèi)似圖層
多個(gè)drawable的集合,類(lèi)似圖層概念,通過(guò)將不同的drawable放置在不同的層上面從而達(dá)到一種疊加后的效果,它的語(yǔ)法規(guī)則如下:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/item1"
android:bottom="1dp"
android:drawable="@drawable/ic_launcher"
android:left="1dp"
android:right="1dp"
android:top="1dp">
</item>
</layer-list>
一個(gè)layer-list可以包含多個(gè)item,每個(gè)item表示一個(gè)drawable。上下左右是個(gè)屬性表示Drawable相對(duì)于view的上下左右偏移量,單位為像素。可以通過(guò)drawable來(lái)直接引用一個(gè)drawable資源。也可以直接在item標(biāo)簽下自定義drawable。
默認(rèn)情況下,layer-list中所有的drawable都會(huì)被縮放到view的大小。layer-list有層次概念,下面的drawable會(huì)覆蓋上面的drawable。通過(guò)合理分層,可以實(shí)現(xiàn)一些特殊的疊加效果。
4. StateListDrawable(選擇器)
選擇器標(biāo)簽,對(duì)應(yīng)的標(biāo)簽是<selector>,也是一個(gè)drawable的集合,常用來(lái)根據(jù)當(dāng)前狀態(tài)改變顏色。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
<!-- 是否會(huì)隨著狀態(tài)的改變而改變,默認(rèn)為false,表示會(huì)隨著改變 -->
android:constantSize="true"
<!-- 是否開(kāi)啟抖動(dòng),開(kāi)啟可以在低分辨率手機(jī)上獲得較好的顯示,建議為true -->
android:dither="true"
<!-- 是否隨著狀態(tài)而改變內(nèi)邊距,建議為true -->
android:variablePadding="true">
<item
<!-- 對(duì)應(yīng)的drawable -->
android:drawable="@drawable/ic_launcher"
<!-- 按下?tīng)顟B(tài),比如button按下未松開(kāi) -->
android:state_pressed="true"
<!-- 表示View已經(jīng)獲得焦點(diǎn) -->
android:state_focused="true"
<!-- 光標(biāo)是否懸停,4.0以后特性 -->
android:state_hovered="true"
<!-- 表示用戶(hù)選擇了view -->
android:state_selected="true"
<!-- 表示組件是否能被選中,如RadioButton -->
android:state_checkable="true"
<!-- 表示用戶(hù)選中了view,一般用于選擇按鈕 -->
android:state_checked="true"
<!-- 表示view當(dāng)前處于可用狀態(tài) -->
android:state_enabled="true"
<!-- 表示view處于激活狀態(tài) -->
android:state_activated="true"
<!-- 應(yīng)用程序是否在前臺(tái) -->
android:state_window_focused="true">
</item>
</selector>
注意:如果有多個(gè)item,那么程序?qū)⒆詣?dòng)從上到下進(jìn)行匹配,最先匹配的將得到應(yīng)用。(不是通過(guò)最佳匹配)如果一個(gè)item沒(méi)有任何的狀態(tài)說(shuō)明,那么它將可以被任何一個(gè)狀態(tài)匹配。所以默認(rèn)的item應(yīng)該放到最后一條,否則會(huì)導(dǎo)致下邊的選項(xiàng)沒(méi)有效果。
5. LevelListDrawable(不同等級(jí)切換不同drawable)
LevelListDrawable對(duì)應(yīng)于<level-list>標(biāo)簽,用來(lái)表示一個(gè)drawable集合。集合中每一個(gè)drawable都一個(gè)等級(jí),根據(jù)不同的等級(jí),LevelListDrawable會(huì)切換為對(duì)應(yīng)的Drawable,具體詳情如下:
<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item
<!-- 對(duì)應(yīng)的drawable -->
android:drawable = "@drawable/ic_lunch"
<!-- 最大等級(jí) -->
android:maxLevel = "2"
<!-- 最小等級(jí) -->
android:minLevel = "1">
<!-- 在最大和最小等級(jí)之間的等級(jí)會(huì)對(duì)應(yīng)此item中的Drawable,當(dāng)它作為view的背景時(shí)候,可以通過(guò)
Drawable的setLevel方法來(lái)設(shè)置不同的等級(jí),從而切換具體的drawable。還可以通過(guò)ImageView的
setImageLevel方法來(lái)切換,等級(jí)范圍是0到10000,0是默認(rèn)值 -->
</item>
</level-list>
6. TransitionDrawable(可實(shí)現(xiàn)淡入淡出)
對(duì)應(yīng)的是<transition>標(biāo)簽,用于實(shí)現(xiàn)兩個(gè)drawable之間淡入淡出的效果,具體使用方法如下
<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android" >
<item
<!-- 對(duì)應(yīng)的drawable -->
android:drawable = "@drawable/ic_lunch"
<!-- 對(duì)應(yīng)的id -->
android:id = "@+id/item1"
<!-- drawable四周的偏移量 -->
android:top = "1dp"
android:right = "1dp"
android:bottom = "1dp"
android:left = "1dp">
</item>
</transition>
使用方式:
定義漸變
<?xml version="1.0" encoding="utf-8"?> <transition xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/drawable1" /> <item android:drawable="@drawable/drawable" /> </transition>
將漸變添加到背景
<TextView android:id = "@+id/button" andoird:layout_height = "wrap_content" android:layout_width = "wrap_content" android:background = "@drawable/transition_drawable" />
在代碼中控制
TextView textView = (TextView)findViewById(R.id.button); TransitionDrawable drawable = (TransitionDrawable)textView.getBackground(); drawable.startTransition(1000);
7. InsetDrawable(內(nèi)嵌一個(gè)Drawable)
可以將Drawable內(nèi)嵌到自己內(nèi)部,并在四周留出空隙,一般用在希望自己背景比自己實(shí)際區(qū)域小的view中。
<?xml version="1.0" encoding="utf-8"?> <inset xmlns:android="http://schemas.android.com/apk/res/android" <!-- 對(duì)應(yīng)的Drawable,也可以直接寫(xiě)在內(nèi)部 --> android:drawable="@drawable/ic_launcher" <!-- Drawable距離四周的邊距 --> android:insetBottom="2dp" android:insetLeft="2dp" android:insetRight="2dp" android:insetTop="2dp" > <!-- 內(nèi)部用來(lái)放置對(duì)應(yīng)的Drawable,也可以直接在上邊引用 --> </inset>
8. ScaleDrawable(縮放類(lèi),可以縮小)
對(duì)應(yīng)的代碼如下:
<?xml version="1.0" encoding="utf-8"?> <scale xmlns:android="http://schemas.android.com/apk/res/android" <!-- 對(duì)應(yīng)的Drawable --> android:drawable="@drawable/ic_launcher" <!-- 顯示的位置 --> android:scaleGravity="center" <!-- 對(duì)應(yīng)的縮放比例 --> android:scaleHeight="50%" android:scaleWidth="50%" > </scale>
在使用時(shí)時(shí)候必須設(shè)置Drawable的級(jí)別,否則無(wú)法使用,設(shè)置級(jí)別的代碼如下:
View testScale = findViewById(R.id.test_scale); scaleDrawable testScaleDrawable = (ScaleDrawable)testScale.getBackground(); testScaleDrawable.setLevel(1);//范圍是1~10000,只要不為零就可以
9. ClipDrawable(根據(jù)不同設(shè)置裁剪Drawable)
可以根據(jù)當(dāng)前等級(jí)來(lái)裁剪另一個(gè)Drawable,具體的代碼如下:
<?xml version="1.0" encoding="utf-8"?> <clip xmlns:android="http://schemas.android.com/apk/res/android" <!-- 裁剪方向,水平或豎直 --> android:clipOrientation="horizontal" android:drawable="@+id/icon" <!-- 和clipOrientation配合使用,詳情見(jiàn)下面說(shuō)明--> android:gravity="top" > </clip>
top——放置到頂部,如果為豎直裁剪,那么從底部開(kāi)始裁剪
bottom——放到底部,如果為豎直裁剪,那么從頂部開(kāi)始裁剪
left——放到左邊,如果為水平裁剪,那么從右開(kāi)始裁剪(此為默認(rèn))
right——放到右邊,若為水平裁剪,那么從左邊開(kāi)始裁剪
center_vertical——豎直居中,豎直裁剪時(shí),上下同時(shí)裁剪
fill_vertical——豎直方向填充,如果為豎直裁剪,僅當(dāng)clipDrawable等級(jí)為0時(shí)(此時(shí)不可見(jiàn),為完全裁剪),才有裁剪行為
(水平方向也具有和豎直類(lèi)似的屬性,對(duì)應(yīng)為center_horizontal和fill_horizontal,用法與上面兩個(gè)類(lèi)似)
center——中部居中,豎直裁剪時(shí)上下同時(shí)減,水平裁剪時(shí)左右同時(shí)減
fill——充滿(mǎn)整個(gè)drawable,當(dāng)clipDrawable等級(jí)為零時(shí)有效
clip_vertical——附加選項(xiàng),表豎直方向裁剪
clip_horizontal——附加選項(xiàng),表豎直方向裁剪
使用時(shí)候需要在代碼中設(shè)置等級(jí)具體代碼如下
ImageViwe testClip = (ImageView)findViewById(R.id.test_clip); ClipDrawable testClipDrawable = (ClipDrawable)testClip.getDrawable(); //等級(jí)為從0到10000,等級(jí)0表示完全裁剪,等級(jí)10000表示不裁剪 testClipDrawable.setLevel(5000);
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。
- android中圖形圖像處理之drawable用法分析
- 關(guān)于Android中drawable必知的一些規(guī)則
- Android自定義Drawable實(shí)現(xiàn)圓角效果
- Android Drawable及其相關(guān)類(lèi)的使用
- Android開(kāi)發(fā)基于Drawable實(shí)現(xiàn)圓角矩形的方法
- Android自定義Drawable實(shí)現(xiàn)圓形和圓角
- Android Drawable和Bitmap的轉(zhuǎn)換實(shí)例詳解
- Android中drawable使用Shape資源
- Android開(kāi)發(fā)使用Drawable繪制圓角與圓形圖案功能示例
- Android自定義Drawable之在Drawable中部指定透明區(qū)域方法示例
相關(guān)文章
Android Alertdialog(實(shí)現(xiàn)警告對(duì)話(huà)框)
本篇文章主要介紹了Android Dialog對(duì)話(huà)框,具體實(shí)現(xiàn)了警告對(duì)話(huà)框的效果,有需要的可以了解一下。2016-11-11
Android編程使用自定義View實(shí)現(xiàn)水波進(jìn)度效果示例
這篇文章主要介紹了Android編程使用自定義View實(shí)現(xiàn)水波進(jìn)度效果,結(jié)合實(shí)例形式詳細(xì)分析了Android水波動(dòng)畫(huà)效果的具體實(shí)現(xiàn)步驟與相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-01-01
Android編程UI設(shè)計(jì)之GridView和ImageView的用法
這篇文章主要介紹了Android編程UI設(shè)計(jì)之GridView和ImageView的用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Android中GridView和ImageView組件的相關(guān)方法使用技巧,需要的朋友可以參考下2016-01-01
使用DrawerLayout完成滑動(dòng)菜單的示例代碼
這篇文章主要介紹了使用DrawerLayout完成滑動(dòng)菜單的示例代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08
Android隨機(jī)給出加減乘除的四則運(yùn)算算術(shù)題
這篇文章主要為大家詳細(xì)介紹了Android隨機(jī)給出加減乘除的四則運(yùn)算算術(shù)題,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04

