1. 程式人生 > >Android XML Drawable

Android XML Drawable

1.0 指定 margin draw 圖像資源 btn als lns tco

一、簡介

  Android把任何可繪制在屏幕上的圖形圖像都稱為drawable。drawable是一種抽象的圖形,一個繼承了Drawable類的子類,或者是一張位圖圖像。

二、示例

   1. 下面通過一些例子感受一下,利用ShapeDrawable創建彩色圖形,既然XML Drewable與特定的像素密度無關,因此無需考慮特定像素密度的目錄。Drawable的XML文件默認放於res/drawable目錄下,利用Drawable和Shape創建一個圓角按鈕。創建button_shape_normal.xml文件。

 1 <?xml version="1.0" encoding="utf-8"
?> 2 <shape 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 android:shape="rectangle"> 5 6 <corners android:radius="10dp" /> 7 <gradient 8 android:angle="90" 9 android:endColor="#cccccc" 10 android:startColor="#acacac"
/> 11 12 </shape>

  在style.xml中,修改如下:

1 <style name="Remote_control_btn_style">
2         <item name="android:layout_width">0dp</item>
3         <item name="android:layout_height">match_parent</item>
4         <item name="android:background">@drawable/button_shape_normal</
item> 5 </style>

  這樣一個圓角按鈕就完成了。

  2. 下面完成一個按鈕在默認狀態下的樣式,及在點擊按鈕後的變化樣式,再創建一個按鈕點擊後的Drewable文件button_shape_pressed.xml:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <shape
 3     xmlns:android="http://schemas.android.com/apk/res/android"
 4     android:shape="rectangle">
 5 
 6     <corners android:radius="10dp" />
 7 
 8     <gradient
 9         android:angle="270"
10         android:endColor="#cccccc"
11         android:startColor="#acacac" />
12 
13 </shape>

  創建交互式的按鈕shape(button_shape.xml):

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <selector
 3     xmlns:android="http://schemas.android.com/apk/res/android">
 4 
 5     <item android:drawable="@drawable/button_shape_pressed"
 6           android:state_pressed="true" />
 7     <item android:drawable="@drawable/button_shape_normal"
 8           android:state_pressed="false" />
 9 
10 </selector>

  再次修改樣式文件style.xml,如下所示:

1 <style name="Remote_control_btn_style">
2         <item name="android:layout_width">0dp</item>
3         <item name="android:layout_height">match_parent</item>
4         <item name="android:background">@drawable/button_shape</item>
5 </style>

  這樣,一個通過xml繪制的按鈕就完成了。

三、總結

  使用兩張圖片做了個selector (tab_item_home.xml):

1 <?xml version="1.0" encoding="utf-8"?>
2 <selector
3     xmlns:android="http://schemas.android.com/apk/res/android">
4     <item android:drawable="@drawable/tab_ic_norm_home" />
5     <item android:state_pressed="true" android:drawable="@drawable/tab_ic_sel_home" />
6 </selector>

  為ImageView的src或者background設置樣式(itemView.xml),

1 <ImageView
2         android:id="@+id/tab_item_icon"
3         android:layout_width="wrap_content"
4         android:layout_height="wrap_content"
5         android:layout_margin="3dp"
6         android:src="@drawable/tab_item_home"/>

  在運行後,點擊總是沒有效果,那麽,問題出在哪裏了呢?

  在做出如下修改,點擊效果就恢復正常了,

1 <?xml version="1.0" encoding="utf-8"?>
2 <selector
3     xmlns:android="http://schemas.android.com/apk/res/android">
4     <item android:state_pressed="true" android:drawable="@drawable/tab_ic_sel_home" />
5     <item android:state_selected="true" android:drawable="@drawable/tab_ic_sel_home"/>
6     <item android:drawable="@drawable/tab_ic_norm_home" />
7 </selector>

  PS: 設置按鈕selected狀態,在代碼中可以動態設置被選中後的持續效果。

  總結:default(默認)/不點擊的圖片應該放在最下邊,才會有點擊效果,不然,只會顯示default圖片。

四、核心圖像資源子類

  • BitmapDrawable對象:用於創建、平鋪、拉伸以及對齊位圖。
  • ColorDrawable對象:用於用顏色填充指定的其它各類對象。
  • GradientDrawable對象:用於創建並繪制自定義漸變。
  • AnimationDrawable對象:用於創建基於幀的動畫。
  • TransitionDrawable對象:用於創建交叉淡入淡出過渡。
  • NinePatchDrawable對象:用於通過定義可拉伸區域來創建可縮放位圖。

Android XML Drawable