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>