Android當中的動畫1—Drawable動畫


    1、前言
    
        在我們Android開發當中,用戶的交互佔了很大的比重,而動畫在用戶看來,是很好的用戶體驗,也就是說如果掌握了動畫,在UI方面,就可以實現很炫酷的效果,
    我是劉酸酸,今天第一次開博,將會寫關於Android動畫的一個專題,希望大家多多支持,有不對的地方可以在下方留言,我們一起進步,一起快樂的碼代碼。
    
    2、正文
        
        1、關於Android動畫的總體的介紹,
            Android當中的動畫,主要分爲Frame(逐幀動畫),View動畫(補間動畫),Property動畫(屬性動畫),
            
                1、Frame(逐幀動畫):做過視頻的應該都知道,動作在某一瞬間就是一張圖片,而這一張圖片叫做這個視頻的一幀,而幀動畫就是在Drawable資源目錄下去定義一系列的圖片,而Android內部則讓這一系列的圖片動起來,就是所謂的幀動畫,逐幀動畫可以被定義在XML文件當中,也可以完全編碼實現。
                    
                2、View動畫(補間動畫):通過對View的內容實現了一系列的圖形變換操作,通過平移,縮放,旋轉,改變透明度來實現動畫的效果,在實現方面,可以通過XML文件來實現,也可以通過代碼來實現

                3、Property動畫(屬性動畫):這個先略過,我們會在下一節當中詳細講解
        
        2、通過Frame(逐幀動畫)去實現一個動畫。
            
                1、通過XML去定義Drawable資源文件,通常我們會在/res目錄下的anim或者drawable目錄下定義一個自己的文件,樓主我目錄爲/res/drawable/loading_bg.xml
                    注意:我們需要把所用到的圖片放在drawable下,
               
<span style="font-size:14px;"><?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" 
    android:oneshot="false">
    
    <item android:drawable="@drawable/loading00" android:duration="100"/>
    <item android:drawable="@drawable/loading01" android:duration="100"/>
    <item android:drawable="@drawable/loading02" android:duration="100"/>
    <item android:drawable="@drawable/loading03" android:duration="100"/>
    <item android:drawable="@drawable/loading04" android:duration="100"/>
    <item android:drawable="@drawable/loading05" android:duration="100"/>
    <item android:drawable="@drawable/loading06" android:duration="100"/>
    <item android:drawable="@drawable/loading07" android:duration="100"/>
    <item android:drawable="@drawable/loading08" android:duration="100"/>
    <item android:drawable="@drawable/loading09" android:duration="100"/>
    <item android:drawable="@drawable/loading10" android:duration="100"/>
    <item android:drawable="@drawable/loading11" android:duration="100"/>
    <item android:drawable="@drawable/loading12" android:duration="100"/>
    <item android:drawable="@drawable/loading13" android:duration="100"/>
    <item android:drawable="@drawable/loading14" android:duration="100"/>
    <item android:drawable="@drawable/loading15" android:duration="100"/>
    <item android:drawable="@drawable/loading16" android:duration="100"/>
    <item android:drawable="@drawable/loading17" android:duration="100"/>
    <item android:drawable="@drawable/loading18" android:duration="100"/>
    <item android:drawable="@drawable/loading19" android:duration="100"/>
    <item android:drawable="@drawable/loading20" android:duration="100"/>
    <item android:drawable="@drawable/loading21" android:duration="100"/>
    <item android:drawable="@drawable/loading22" android:duration="100"/>
    <item android:drawable="@drawable/loading23" android:duration="100"/>
    <item android:drawable="@drawable/loading24" android:duration="100"/>
    <item android:drawable="@drawable/loading25" android:duration="100"/>
    <item android:drawable="@drawable/loading26" android:duration="100"/>
    <item android:drawable="@drawable/loading27" android:duration="100"/>
    <item android:drawable="@drawable/loading28" android:duration="100"/>
    <item android:drawable="@drawable/loading29" android:duration="100"/>
    <item android:drawable="@drawable/loading30" android:duration="100"/>
    <item android:drawable="@drawable/loading31" android:duration="100"/>
    <item android:drawable="@drawable/loading32" android:duration="100"/>
    <item android:drawable="@drawable/loading33" android:duration="100"/>
    <item android:drawable="@drawable/loading34" android:duration="100"/>
    

</animation-list>
</span>


                <animation-list>元素是必須的,並且必須要作爲根元素,可以包含一或多個<item>元素;
                    android:onshot如果定義爲true的話,此動畫只會執行一次,如果爲false則一直循環。
                <item>元素代表一幀動畫,
                    android:drawable指定此幀動畫所對應的圖片資源,

                    android:druation代表此幀持續的時間,整數,單位爲毫秒。

                <layer-list>:是圖層的意思,就是一個幀可以使用兩張圖片,而效果就是兩張圖片疊加在一塊, 


                2、我們在自己的Activity的layout(/res/layout/activity_main.xml)文件當中引入自己的資源文件
               
<span style="font-size:14px;">        <ImageView
            android:id="@+id/iv"
            android:layout_width="100dip"
            android:layout_height="100dip"
            android:layout_centerInParent="true"
            android:background="@drawable/loading_bg"
            android:visibility="gone" />

</span>
                大家可以理解爲,我在這裏去設置了一個載體,我們通過這個載體去播放動畫,注意我在background屬性引入了我的動畫,

                3、在Activity當中使用AnimationDrawable類去開始我們的動畫就OK了

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		setContentView(R.layout.activity_main);
		super.onCreate(savedInstanceState);
		ImageView imageView = (ImageView) findViewById(R.id.iv);
	    AnimationDrawable anim = (AnimationDrawable) imageView.getBackground();
	    anim.start();
	}
              4、當然我們有的時候需要動態的給AnimationDrawable動畫當中去動態的去添加我們所說的幀,那麼我們不用去定義Drawable的動畫資源了

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		setContentView(R.layout.activity_main);
		super.onCreate(savedInstanceState);
		ImageView imageView = (ImageView) findViewById(R.id.iv);
		AnimationDrawable animationDrawable = new AnimationDrawable();
		for(int i = 0; i < 35; i++){
			String name = i < 10 ? "0"+i : i+"";
			//根據資源名稱和目錄獲取R.java中對應的資源ID
			int drawableId = getResources().getIdentifier("loading"+name, "drawable", getPackageName());
			Drawable drawable = getResources().getDrawable(drawableId);
			animationDrawable.addFrame(drawable, 100);
		}
		animationDrawable.setOneShot(false);
		imageView.setBackgroundDrawable(animationDrawable);
//		imageView.setBackground(animationDrawable);
		animationDrawable.start();
	}

樓主做的Demo是仿照音悅臺App的加載框,大家可以看一下效果


明天晚上(2016/11/2)給大家講解View動畫,也就是Tween動畫

希望大家多多支持,有錯指出,


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章