前言
Drawable文件是開發當中必不可少的,但之前都是隻記得常用屬性,沒有系統的學習,今天特意做一下總結。
概述
Drawable
shape用於設置控件的自身屬性的效果形狀,這些效果不會因爲狀態的改變而改變,比如圓形,圓角,邊框效果等等。
selector選擇器,所以使用Selector設置的是跟狀態有關的效果,比如點擊時,獲取焦點時,選中時等所展現的控件效果。
layer-list 用於控件效果的層疊。每一個item都可以實現獨立的效果,比如shape或者selector,甚至item中也可以再包含一個layer-list。
shape
- 屬性
android:shape=["rectangle" | "oval" | "line" | "ring"]
rectagle矩形,oval橢圓,line水平直線,ring環形。默認爲矩形
//下面的屬性只有在android:shape="ring時可用:
android:innerRadius //尺寸,內環的半徑。
android:thickness //尺寸,環的厚度
android:innerRadiusRatio //浮點型,以環的寬度比率來表示內環的半徑
android:thicknessRatio //浮點型,以圓環寬度的比率來表示圓環的厚度
android:useLevel //boolean值,Shape爲ring屬性時,android:useLevel="false"該屬性須設置爲false,否則無效果
android:thicknessRatio=”2”,那麼圓環厚度就等於圓環的寬度除以2。
也就是說這個值設置的越大圓環就越細了。注意:這個值會被android:innerRadius覆蓋。默認值是3android:innerRadiusRatio=”5”,那麼內部半徑就等於圓環的寬度除以5。這個值會被android:innerRadius的值覆蓋。默認是9。
- 元素 gradient定義顏色漸變
<gradient
android:angle="integer" //代表漸變顏色的角度
android:centerX="float"//(0 - 1.0) //相對X的偏移位置。
android:centerY="float"//(0 - 1.0) //相對Y的漸變位置。
android:startColor="color" // 起始顏色
android:centerColor="integer" //中間顏色
android:endColor="color" //結束顏色
android:gradientRadius="float" //漸變顏色的半徑.
android:type=["linear" | "radial" | "sweep"] //漸變的樣式 分別爲liner線性漸變 radial環形漸變 sweep 掃描渲染漸變
//注意使用android:type="radial"時需要設置gradientRadius纔會有效果
android:useLevel=["true" | "false"] /> //使用LevelListDrawable時就要設置爲true。設爲false時纔有漸變效果
angle 默認是0. 0 從左往右, 90 從下往上。180是從右往左依次類推,必須是45的整數倍.該屬性只有在type=linear情況下起作用,默認的type爲linear。
- 元素corners定義圓角
<corners //定義圓角
android:radius="dimension" //四個角的圓角半徑
android:topLeftRadius="dimension" //左上角的圓角半徑
android:topRightRadius="dimension" //右上角的圓角半徑
android:bottomLeftRadius="dimension" //左下角的圓角半徑
android:bottomRightRadius="dimension" /> //右下角的圓角半徑
Corners標籤是用來定義圓角的,其中radius與其它四個並不能共同使用。
- 元素solid設置填充顏色
<solid android:color="color"/> //設置填充的顏色
- 元素stroke設置描邊
<stroke
// 設置實線
android:width="dimension" //描邊寬度
android:color="color" //描邊顏色
// 設置虛線
android:dashWidth="dimension" //虛線的寬度,值爲0時是實線
android:dashGap="dimension" /> //虛線的間隔
設置虛線必須四個屬性都寫上
- 元素和
這兩個基本上不怎麼用,因爲他們所具有的功能,控件本身也能實現,這裏不做過多介紹;
<size
android:width="dimension"
android:height="dimension" />
<padding
android:left="dimension"
android:top="dimension"
android:right="dimension"
android:bottom="dimension" />
select
item屬性
android:drawable="@drawable/icon" //默認狀態
android:state_pressed = "boolean" //是否是按壓狀態
android:state_focused = "boolean"//是否取得焦點,比如用戶選擇了一個文本框.
android:state_hovered = "boolean" //光標是否懸停,通常與focused state相同,它是4.0的新特性.
android:state_selected = "boolean" //是否是選中狀態.
android:state_checkable = "boolean" //是否"能被"選中。如:RadioButton是可以被check的。
android:state_checked = "boolean" //是否是選中狀態
android:state_enabled = "boolean" //是否接受觸摸或者點擊事件 (控件是否可用)
android:state_activated = "boolean" //沒用過,不太懂。
android:state_window_focused = "boolean" //應用程序是否在前臺,當有通知欄被拉下來或者一個對話框彈出的時候應用程序就不在前臺了
注意:如果有多個item,那麼程序將自動從上到下進行匹配,最先匹配的將得到應用。(不是通過最佳匹配)
如果一個item沒有任何的狀態說明,那麼它將可以被任何一個狀態匹配。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<bitmap android:src="@drawable/android_red"
android:gravity="center" />
</item>
<item android:top="10dp" android:left="10dp">
<bitmap android:src="@drawable/android_green"
android:gravity="center" />
</item>
<item android:top="20dp" android:left="20dp">
<bitmap android:src="@drawable/android_blue"
android:gravity="center" />
</item>
</layer-list>
使用layer-list可以將多個drawable按照順序層疊在一起顯示,默認情況下,所有的item中的drawable都會自動根據它附上view的大小而進行縮放,layer-list中的item是按照順序從下往上疊加的,即先定義的item在下面,後面的依次往上面疊放
將多個圖片或上面兩種效果按照順序層疊起來
效果如圖:
總結:
以上是在使用過程中對Drawable的總結,如有差錯歡迎批評指正。