Android中常用的Drawable

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屬性)

背景只有下劃線的EditText

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)是為false

  • android: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)切換按鈕

狀態(tài)切換按鈕

當(dāng)然還有TransitionDrawable蚕礼、InsetDrawable烟具、ScaleDrawable和ClipDrawable等梢什,就不一一介紹了,這里只介紹一些常用的朝聋,有興趣的同學(xué)可以繼續(xù)深入了解嗡午,哈哈哈。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末玖翅,一起剝皮案震驚了整個(gè)濱河市翼馆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌金度,老刑警劉巖应媚,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異猜极,居然都是意外死亡中姜,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門跟伏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)丢胚,“玉大人,你說(shuō)我怎么就攤上這事受扳⌒辏” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵勘高,是天一觀的道長(zhǎng)峡蟋。 經(jīng)常有香客問(wèn)我,道長(zhǎng)华望,這世上最難降的妖魔是什么蕊蝗? 我笑而不...
    開(kāi)封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮赖舟,結(jié)果婚禮上蓬戚,老公的妹妹穿的比我還像新娘。我一直安慰自己宾抓,他們只是感情好子漩,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著石洗,像睡著了一般痛单。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上劲腿,一...
    開(kāi)封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音鸟妙,去河邊找鬼焦人。 笑死挥吵,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的花椭。 我是一名探鬼主播忽匈,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼矿辽!你這毒婦竟也來(lái)了丹允?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤袋倔,失蹤者是張志新(化名)和其女友劉穎雕蔽,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體宾娜,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡批狐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了前塔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嚣艇。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖华弓,靈堂內(nèi)的尸體忽然破棺而出食零,到底是詐尸還是另有隱情,我是刑警寧澤寂屏,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布贰谣,位于F島的核電站,受9級(jí)特大地震影響凑保,放射性物質(zhì)發(fā)生泄漏冈爹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一欧引、第九天 我趴在偏房一處隱蔽的房頂上張望山憨。 院中可真熱鬧,春花似錦虹菲、人聲如沸寿酌。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)岸更。三九已至,卻和暖如春膊升,著一層夾襖步出監(jiān)牢的瞬間怎炊,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留评肆,地道東北人债查。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像瓜挽,于是被迫代替她去往敵國(guó)和親盹廷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

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

  • 前言 本文是本人閱讀《Android開(kāi)發(fā)藝術(shù)探索》的第6章《Android的Drawable》后的總結(jié)筆記久橙。包含了...
    daking閱讀 5,320評(píng)論 2 29
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,116評(píng)論 25 707
  • 更多Android總結(jié)知識(shí)點(diǎn) Android中的13種Drawable小結(jié) Android的八種對(duì)話框的實(shí)現(xiàn) An...
    侯蛋蛋_閱讀 3,959評(píng)論 0 5
  • 優(yōu)點(diǎn):使用簡(jiǎn)單俄占,比自定義View的成本低;非圖片類型的Drawable占用空間較小淆衷,這對(duì)減小apk的大小也有很大的...
    小柏不是大白閱讀 2,311評(píng)論 0 1
  • 上一集 女作家魔都買房記 四 鄭青告訴我三個(gè)最重要的信息:第一缸榄,老二家女兒作主不想交錢。第二吭敢,老大兒子沒(méi)主意被老二...
    清涼的水罐閱讀 675評(píng)論 0 1