標籤:scale font 等級 核心 lin val 16px use color
Drawable表示的是一種可以在Canvas上進行繪製的抽象的概念.
6.1 Drawable簡介
Drawable常被用來作為View的背景使用.
Drawable一般都是通過XML來定義的.
Drawable是一個抽象類別,它是所有Drawable對象的基類,每個具體的Drawable都是它的子類.
Drawable的內部寬/高這個參數比較重要,通過getIntrinsicWidth和getIntrinsicHeight這兩個方法可以擷取到它們.
6.2 Drawable的分類
6.2.1 BitmapDrawable
表示的就是一張照片<bitmap/>
6.2.2 ShapeDrawable
可以理解為通過顏色來構造的圖形,它既可以是純色的圖形,也可以是具有漸層效果的圖形.
<shape>標籤,子屬性android:shape="四個選項,rectangle,oval,line,ring"
子標籤
<coners>,只適用於矩形shape,這裡的角度指圓角的程度,用px表示.
<gradient>,與<solid>標籤互斥,其中solid表示純色填充,二gradient則表示漸層效果
<solid>,純色填充,通過android:color即可指定shape中填充的顏色
<stroke>,Shape的描邊
<padding>,表示空白,但是它表示的不是shape的空白,而是包含它的View的空白
<size>,shape 的大小
6.2.3 LayerDrawable
對應的XML標籤是<layer-list>,它表示一種層次化的Drawable集合,通過將不同的Drawable紡織在不同的層上面從而達到一種疊加後的效果.
一個layer-list中可以包含多個item,每個item表示一個Drawable
6.2.4 StateListDrawable
對應的XML標籤是<selector>,也是表示Drawable集合,每個Drawable都對應著View的一種狀態.
常見狀態:android:state_pressed/state_focused/state_selected/state_checked/state_enabled.
6.2.5 LevelListDrawable
對應的XML標籤是<level-list>,每個Drawable都有一個等級(levle)的概念.
根據不同的等級,LevelListDrawable會切換為對應的Drawable
6.2.6 TransitionDrawable
對應的XML標籤是<transition>,它用於實現兩個Drawable之間的淡入淡出效果
6.2.7 InsetDrawable
對應的XML標籤是<inset>,它可以將其他Drawable內嵌到自己當中,並可以在四周留出一定的間隔.
6.2.8 ScaleDrawable
對應的XML標籤是<scale>,它可以根據自己的等級(level)將指定的Drawable縮放到一定的比例
6.2.9 ClipDrawable
對應的XML標籤是<clip>,他可以根據自己當前的等級(level)來裁減另一個Drawable.
6.3 自訂Drawable
Drawable的工作原理簡單,其核心就是draw方法.
系統會調用Drawable的draw方法來繪製view的背景,可以通過重寫Drawable的draw方法來自訂Drawable
draw,setAlpha,setColorFilter和getOpacity是必須重載實現的方法.
第六章:Android的Drawable