Days16 FrameAnimation & TweenAnimation &

1、FrameAnimation
幀動畫:
a、(AnimationDrawable對象)就像GIF圖片,通過一系列Drawable依次顯示來模擬動畫的效果;
b、必須以animation-list爲根元素,以item表示要輪換的照片,duration表示各項顯示的持續時間(XML文件要放在/res/anim/或者/res/animator目錄下)
c、AnimationDrawable對象的方法:
isRunning()返回值爲boolean型,動畫是否正在運行
start()動畫開始播放
stop()動畫停止播放
setOneShot(false/true);一組動畫是否只播放一次

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:drawable="@drawable/anim1"
        android:duration="150"/>
    <item
        android:drawable="@drawable/anim2"
        android:duration="150"/>
    <item
        android:drawable="@drawable/anim3"
        android:duration="150"/>
    <item
        android:drawable="@drawable/anim4"
        android:duration="150"/>
    <item
        android:drawable="@drawable/anim5"
        android:duration="150"/>
    <item
        android:drawable="@drawable/anim6"
        android:duration="150"/>

</animation-list>
    //AnimationDrawable對象
    private AnimationDrawable anim = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();

        //通過ImageView的getBackground()方法,此方法的返回值爲Drawable類型
        //因爲其ivPic的是AnimationDrawable故可強轉,從而獲得AnimationDrawable對象
        //<--android:background="@drawable/boy_girl"-->
        anim = (AnimationDrawable) ivPic.getBackground();
    }

    /**
     * 屏幕的觸摸事件(只要觸摸屏幕即使不觸摸圖片也會觸發)
     * 只要用戶在屏幕上有點擊或觸摸事件的發生就會自動觸發此方法
     */
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        //一組動畫是否只播放一次
        anim.setOneShot(false);
        //調用AnimationDrawable對象的start()方法開始動畫
        anim.start();
        return super.onTouchEvent(event);
    }

2、TweenAnimation
補間動畫:
a、就是一系列View 形狀的變換,如大小的縮放,透明度的改變,水平/旋轉位置的改變
b、動畫的定義既可以用java代碼定義也可以用XML定義(建議XML)
用XML資源實現補間動畫
用XML定義的動畫要放在res/anim文件夾內
優點:代碼重用性比較高
alpha.xml

<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="3000"
    android:fromAlpha="0.5"
    //注意:此屬性若無set節點,當前節點爲最外層節點可以設置
    //對比set.xml
    //fillbefore屬性:動畫結束後畫面停留在第一幀
    //fillafter屬性: 動畫結束後畫面停留在最後一幀
    android:fillAfter="false"
    android:toAlpha="0"
    android:repeatCount="2"
    android:repeatMode="restart" >

</alpha>
public void alpha(View v){
        Animation anim = AnimationUtils.loadAnimation(this, R.anim.alpha);

        ivPic.startAnimation(anim);
    }

translate.xml

<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="3000"
    // 指的是開始平移的位置
    id:fromXDelta="50"
    // 指的是要平移到的位置
    android:toXDelta="50" 
    android:fromYDelta="0"
    android:toYDelta="0"
    android:repeatCount="2"
    android:repeatMode="restart">

</translate>
public void translate(View v){
        Animation anim = AnimationUtils.loadAnimation(this, R.anim.translate);

        ivPic.startAnimation(anim);
    }

set.xml

<set xmlns:android="http://schemas.android.com/apk/res/android"
    //若存在組合關係,不能在</alpha>,</scale>,</translate>,
    //</rotate>中設置,不然沒有效果,而必須在</set>節點中設置
    android:fillAfter="true" >

    <alpha
        android:duration="3000"
        android:fromAlpha="0.5"
        android:repeatCount="2"
        android:repeatMode="restart"
        android:toAlpha="0" />

    <translate
        android:duration="3000"
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:repeatCount="2"
        android:repeatMode="restart"
        android:toXDelta="100"
        android:toYDelta="200" >
    </translate>

</set>
發佈了12 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章