android進階(六)-----Android Drawable

一、Drawable簡介

Drawable一般通過XML來定義,Drawable是一個抽象類,是所有Drawable的基類。

二、Drawable分類

1、BitmapDrawable:表示一張圖片,開發中,可以直接引用原始的圖片,但是也可以通過XML來描述它。例如:

<?xml version="1.0" encoding="utf-8">

<bitmap

xmlns:android="http://schemas.android.com/apk/res/android"

android:src="@[package:]drawavke/drawable_resource"

android:antialias=["true"|"false"]

android:dither=["true"|"false"]

android:filter=["true"|"false"]

android:gravity=["top"|"bottom"|"left"|"right"|"center_vertical"|"fill_vertical"|"venter_horizontal"|"fill_horizontal"|"center"|"fill"|"clip_vertical"|"clip_horizontal"]

android:mipMap=["true"|"false"]

android:tileMode=["disabled"|"clamp"|"repeat"|"mirror"]/>

src:圖片的資源id

antialias:是否開啓圖片鋸齒功能

dither:是否開啓抖動效果

filter:是否開啓過濾效果

gravity:對圖片進行定位

mipMap:圖像相關的處理技術,也叫紋理映射

tileMode:平鋪模式。

 

2、ShapeDrawable

ShapeDrawable是一種常見的Drawable,可以理解爲通過顏色來構造的圖形,既可以是純色的圖形,也可以是漸變的圖形。

<?xml version="1.0" encoding="utf-8">

<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="interger"

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:dashGap="integer"/>

</shape>

(1)shape:表示圖形的形狀,rectangle(矩形)、oval(橢圓)、line(橫線)、ring(圓環)

(2)corners:表示shape的角度,只適用於矩形shape

radius:爲四個角同時設定相同的角度,優先級低,會被其他四個屬性覆蓋

toLeftRadius:左上角的角度

toRightRadius:右上角的角度

bottomLeftRadius:左下角的角度

bottomRightRadius:右下角的角度

(3)gradient:與solid標籤互斥,solid純色填充,而gradient漸變效果

angle:漸變的角度,值必須是45的倍數,0表示從左到右,90表示從下到上

centerX:漸變的中心點的橫座標

centerY:漸變的中心點的縱座標,漸變的中心點會影響漸變的具體效果

startColor:漸變的起始色

centerColor:漸變的中間色

endColor:漸變的結束色

gradientRadius:漸變的半徑,當type=“radial”有效

useLevel:一般爲false,當Drawable作爲StateListDrawable使用時爲true

type:漸變的類別,有linear(線性漸變)、radial(徑向漸變)、sweep(掃描線漸變)

(4)solid:純色填充,通過color即可指定shape填充的顏色

(5)stroke:Shape的描邊

width:描邊的寬度,越大則shape的邊緣線就會越粗

color:描邊的顏色

dashWidth:虛線的線段寬度

dashGap:虛線的線段間隔

(6)padding:表示空白,不是shape的空白,是包含的View的空白,有四個屬性:left、top、right、bottom

(7)size:shape的大小:有兩個屬性width和height,表示shape的寬高

 

3、LayerDrawable

LayerDrawable對應的XML標籤是<layer-list>,表示一種層次的Drawable集合

例如:

<?xml version="1.0" encoding="utf-8"?>

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

<item>

<shape android:shape="rectangle">

<solid android:color="#ccc"/>

</shape>

</item>

<item android:bottom="6dp">

<shape android:shape="rectangle">

<solid android:color="#ffffff"/>

</shape>

</item>

<item

android:bottom="1dp"

android:left="1dp"

android:right="1dp">

<shape android:shape="rectangle">

<solid android:color="#ffffff"/>

</shape>

</item>

</layer-list>

 

4、StateListDrawable

對應於<selector>標籤,也是表示Drawable集合,每個Drawable對應View的一種狀態。主要用於設置單擊View的背景

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android"

android:constantSize=["true"|"false"]

android:dither=["true"|"fase"]

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_checkable=["true"|"false"]

android:state_enabled=["true"|"false"]

android:state_activated=["true"|"false"]

android:state_window_focused=["true"|"false"]/>

</selector>

constantSize:是否隨着狀態改變固有大小,默認是false(隨狀態改變而改變)

dither:是否開啓抖動效果

variablePadding:是否隨狀態改變而改變,true改變,false表示StateListDrawable的paddiing是內部所有Drawable的padding的最大值。默認false,不建議開啓

 

5、LevelListDrawable

對應於<level-list>標籤,表示一個Drawable集合,集合中每個Drawable都有一個等級概念,根據等級不同切換不同Drawable。等級範圍0-10000

<?xml version="1.0" encoding="utf-8"?>

<level-list xmlns:android="http://schemas.android.com/apk/res/android">

<item

android:drawable="@drawable/status_off"

android:maxLevel="0"/>

<item

android:drawable="@drawable/status_on"

android:maxLevel="1"/>

</selector>

 

6、TransitionDrawable

對應於<ltransition>標籤,用於實現兩個Drawable之間的淡入淡出

<?xml version="1.0" encoding="utf-8"?>

<transition xmlns:android="http://schemas.android.com/apk/res/android">

<item

android:drawable="@[package:]@drawable/status_resource"

android:id="@[+][package:]id/resource_name"

android:top="dimension"

android:right="dimension"

android:bottom="dimension"

android:left="dimension"/>

</transition>

 

7、InsetDrawable

對應於<inset>標籤,可以把其他Drawable內嵌到自己當中,並可以在四周留出一定間距

<?xml version="1.0" encoding="utf-8"?>

<inset xmlns:android="http://schemas.android.com/apk/res/android"

android:insetBottom="15dp"

android:insetLeft="15dp"

android:insetRight="15dp"

android:insetTop="15dp">

<shape android:shape="rectangle">

<solid android:color="#ff0000">

</shape>

</transition>

8、ScaleDrawable

對應於<scale>標籤,可以根據自己的等級將指定的Drawable縮放到一定比例。

<?xml version="1.0" encoding="utf-8"?>

<scale xmlns:android="http://schemas.android.com/apk/res/android"

android:idrawable="drawable/drawable_resource"

android:scaleGravity=["top"|"bottom"|"left"|"right"|"center_vertical"|"fill_vertical"|"venter_horizontal"|"fill_horizontal"|"center"|"fill","clip_vertical","clip_horizontal"]

android:scaleHeight="percentage"

android:scaleWidth="percentage">

<shape android:shape="rectangle">

<solid android:color="#ff0000">

</shape>

</transition>

 

9、ClipDrawable

對應於<clip>標籤,根據自己當前的等級來裁剪另一個Drawable,裁剪方向通過android:clipOrientation和android:gravity控制

<?xml version="1.0" encoding="utf-8"?>

<clip xmlns:android="http://schemas.android.com/apk/res/android"

android:idrawable="drawable/drawable_resource"

android:clipOrientation=["horizontal"|"vertical"]

android:gravity=["top"|"bottom"|"left"|"right"|"center_vertical"|"fill_vertical"|"venter_horizontal"|"fill_horizontal"|"center"|"fill","clip_vertical","clip_horizontal"]

android:scaleHeight="percentage"

android:scaleWidth="percentage">

<shape android:shape="rectangle">

<solid android:color="#ff0000">

</shape>

</clip>

 

發佈了68 篇原創文章 · 獲贊 17 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章