一.性質
可直接使用.png、.jpg、.gif、9.png等圖片作為資源,也可使用多種XML文件作為資源。(就是這些資源都能生成Drawable對象)。並對XML文件作出相關處理
二.XMLDrawable
1.StateListDrawable
作用:StateListDrawable對象所顯示的Drawable對象會隨着目標組件狀態的改變而改變
組成:
根元素<selector/>,子元素<item/>
子元素<item/>的屬性:android:color或android:drawable
android:state_xxx:狀態
舉例:
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="false" android:drawable="@mipmap/start"/> <item android:state_pressed="true" android:drawable="@mipmap/start_down"/> </selector>
相關目標組件的狀態不列出來
2.LayerDrawable
作用:可包含一個Drawable數組,系統會按照Drawable對象的數組順序繪制,索引越大越被繪制在上層
根元素:<layer-list> 子元素:<item/>
子元素的屬性:android:drawable 作為LayerDrawable的Drawable對象
android:id 為Drawable對象指定標識符
android:buttom|top...等 指定Drawable的繪制位置
實例1:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!--調用android自帶的id修改,利用@android:id 修改父style的background--> <item android:drawable="@mipmap/p_1" android:id="@android:id/background"/> <item android:drawable="@mipmap/p_2" android:id="@android:id/progress"/> </layer-list>
實例2:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!--可以在item里面創建各種各樣的XMLDrawable--> <item> <bitmap android:src="@mipmap/p_3" android:gravity="center"/> </item> <item> <bitmap android:src="@mipmap/p_4" android:gravity="center"/> </item> </layer-list>
3.ShapeDrawable
作用:設置一個基本的幾何圖形(矩形、圓形、線條燈)
根元素:<shape/> 根元素的屬性:android:shape=["rectangle"|"oval"|"line"|"ring"]
子元素:<corners/>:設置整體或者四個邊角的弧度
<gradient/>:漸變(可選擇漸變的角度但必須是45的倍數,默認為0,漸變的中心點,漸變的類型,漸變的半徑和開始和終止的顏色)
<padding/>:內邊距 (可以控制四周的邊距)
<size/>:形狀的大小 (設置形狀的寬高)
<solid/>:單種顏色填充
<stroke/>:繪制邊框 (可設置畫筆的顏色和粗細 並 設置每畫一條線的長度和間距且必須兩者都設置才有效)
詳情參照:http://blog.csdn.net/lonelyroamer/article/details/8254592
實例:
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <corners android:radius="3dp"/> <padding android:left="7dp" android:right="7dp" android:bottom="7dp" android:top="7dp"/> <gradient android:angle="45" android:startColor="#0000" android:endColor="#ffff"/> </shape>
4.ClipDrawable
作用:從Drawable上截取一個“圖片片段”
根元素:<clip> 不使用子元素。
根元素屬性: android:drawable: 選定Drawable對象
android:clipOrientation:指定截取方向
android:gravity:從什么地方開始截取
總結:選定圖片並選擇方向與位置截取圖片
使用:從java中獲取ClipDrawable並用setLevel()改變截取大小 //setLevel()只能從0~10000
<!--res/drawable/test_clip.xml--> <clip xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@mipmap/start" android:clipOrientation="horizontal" android:gravity="center"> </clip>
<!--res/layout/activity_main.xml--> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.chen.android.test.MainActivity"> <ImageView android:id="@+id/imageView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/test_clip"/> </LinearLayout>
/*實現圖片漸漸展開的效果*/ public class MainActivity extends AppCompatActivity { int data = 0; int what = 0X11; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ImageView img = (ImageView)findViewById(R.id.imageView); //ImageView.getDrawable()獲取的是當前控件里的圖片,返回的是Drawable類型,還有說明Drawable對象可隨意變成子對象並調用子對象的方法 final ClipDrawable clipDrawable = (ClipDrawable)img.getDrawable(); //創建Handler等待計時器傳送的信息,使圖片擴展 final Handler mHandler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (msg.what == what){ clipDrawable.setLevel(data);//擴大截取的圖片面積 data += 200; } } }; //創建計時器 final Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { if (data >= 10000){ timer.cancel(); } mHandler.obtainMessage(what).sendToTarget(); } },0,300); } }
5.AnimationDrawable
簡介:放在res/anim下,支持逐幀動畫和補間動畫
根元素:<set> 根元素屬性:android:interpolator="參數"
參數:@android:anim/ 為開頭 選擇 linear_interpolator:勻速變換 | accelerate_interpolar:加速變換 | decelerate_interpolator:減速變換
android:shareInterpolator= "true|false" :是否讓資源的interpolator與根元素相同
android:duration="時間":定義持續時間
子元素(同樣可以設置duration):<alpha>:設置開始和結束的透明度
<scale>:設置縮放的中心、開始的X,Y的尺寸和結束時X,Y的尺寸
<translate>:設置圖片的開始位置和結束位置進行位移
<rotate>:設置旋轉的中心、開始的角度和結束時候的角度
注意:利用android:fillAfter="true|false":設置保留后的狀態(哪個狀態想保留就用這個,如果都像就放在<set>中)
使用:利用AnimationUtils的靜態方法loadAninmation(Context context,int resId)
<!--在res/anim/test_animtaion中--> <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/linear_interpolator" android:shareInterpolator="true" android:fillAfter="true"> <alpha android:fromAlpha="50.0" android:toAlpha="100.0" /> <scale android:pivotX="50%" android:pivotY="50%" android:fromXScale="1.0" android:fromYScale="1.0" android:toXScale="1.5" android:toYScale="1.5" android:duration="3000" /> <translate android:fromXDelta="30" android:toXDelta="300" android:fromYDelta="40" android:toYDelta="90" android:duration="3000"/> </set>
/*實現動畫*/ public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ImageView img = (ImageView)findViewById(R.id.imageView); /*利用工具類獲取對象*/ Animation animation= AnimationUtils.loadAnimation(this,R.anim.test_animation); /*將動畫附加在圖片上*/ img.startAnimation(animation); } }
