Android動畫系統(tǒng)的種類:
1. 屬性動畫 (Property Animation)
2. 補間動畫 (Tween Animation)
3. 幀動畫 ? ? (Frame Animation)
4. Drawable
屬性動畫(Property Animation):
可以改變控件對象屬性的對象礼仗,譬如控件的位置蠢莺,透明度,旋轉等。
包含兩個基本的Animator:
1.ValueAnimator : 提供一個動畫時序引擎丧枪,用來計算動畫時序內,動畫的值。
使用方式:
private void valueAnimatorTest(final View view) {?
? ? ? ValueAnimator anim = new ValueAnimator(); //創(chuàng)建ValueAnimator
? ? ? anim.setDuration(2000);? // 設置動畫時常
? ? ? anim.setObjectValues(new My()); //設置自定義初始值
? ? ? anim.setEvaluator(new TypeEvaluator<My>() {?
? ? ? ? ? ? ? @Override
? ? ? ? ? ? ? public My evaluate(float fraction, My startValue, My endValue) {
? ? ? ? ? ? ? ? ? ? System.out.println("fraction = " + fraction);
? ? ? ? ? ? ? ? ? ? // fraction:動畫執(zhí)行時間片段
? ? ? ? ? ? ? ? ? ? My my = new My();? // My是一個實體類,可以自定義View的各個屬性值
? ? ? ? ? ? ? ? ? ? return my;
? ? ? ? ? ? ? }
? ? ? });
? ? anim.addUpdateListener(new AnimatorUpdateListener() {
? ? ? ? ? ? ? ? @Override
? ? ? ? ? ? ? ? public void onAnimationUpdate(ValueAnimator valueAnimator) {
? ? ? ? ? ? ? ? ? ? ? My value = (My)valueAnimator.getAnimatedValue(); // 得到當前動畫片段的計算的自定義值廷痘,用來改變控件的屬性
? ? ? ? ? ? ? }
? ? ? });
? ? ? anim.start();
}
2. ObjectAnimator:是ValueAnimator的子類,這里對屬性進行了一層邏輯實現(xiàn)件已,使用者可以直接通過動畫改變控件屬性笋额。
translationX、translationY ? ? ? ? ? ?控制View相對于父布局平移距離
rotation篷扩、rotationX兄猩、rotationY ? ? 控制旋轉
scaleX、scaleY ? ? ? ? ? ? ? ? ? ? ? ? ? ?控制X 、Y軸方向的縮放
pivotX厦滤、pivotY ? ? ? ? ? ? ? ? ? ? ? ? ? ? 縮放和旋轉的支點援岩,默認為View的中心
alpha ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?透明度(0~1)
x、y ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?在父控件中的位置(注意和translationX掏导、translationY的區(qū)分)
使用方式:
1. 控制單個屬性動畫
ObjectAnimator anim = ObjectAnimator.ofFloat(view, "scaleX", 1.0F,? 0.0F).setDuration(500);
anim.start();
2. 控制多個屬性動畫
ObjectAnimator anim = ObjectAnimator.ofFloat(view, "anywords", 1.0F,? 0.0F).setDuration(500);
anim.addUpdateListener(new AnimatorUpdateListener(){
? ? ? ? ? @Override
? ? ? ? ? public void onAnimationUpdate(ValueAnimator animation){
? ? ? ? ? ? ? ? ? ? float cVal = (Float) animation.getAnimatedValue();
? ? ? ? ? ? ? ? ? ? view.setAlpha(cVal);
? ? ? ? ? ? ? ? ? ? view.setScaleX(cVal);
? ? ? ? ? ? ? ? ? ? view.setScaleY(cVal);
? ? ? ? ? }
}
anim.start();
補間動畫 (Tween Animation)
比較簡單羽峰,與屬性動畫相比趟咆,只能改變控件的顯示狀態(tài),不能實際改變控件屬性值梅屉,主要有四中:
1. ScaleAnimation
2. RotateAnimation
3. AlphaAnimation
4. TranslateAnimation
補間動畫相對簡單值纱,具體實現(xiàn)方式可參考其構造方法即可。
幀動畫? ? (Frame Animation)
顧名思義坯汤,就是與電影的播放原理一樣虐唠,逐幀顯示圖片達到動畫的效果,實現(xiàn)方式:
1. 在res目錄下建立 drawable 文件夾
2. 在drawable文件夾目錄下創(chuàng)建? frame.xml 文件
3. frame.xml文件格式
<xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
? <item android:drawable="@drawable/pic1" android:duration="200"/>
? <item android:drawable="@drawable/pic2" android:duration="200"/>
? <item android:drawable="@drawable/pic3" android:duration="200"/>
</animation-list>
4. 應用在ImageView中
<ImageView
? ? ....
? ?android:src = "@drawable/frame"
/>
5.? 代碼啟動動畫
AnimationDrawable animationDrawable = (AnimationDrawable) view.getDrawable();
animationDrawable.start();?