1. 程式人生 > >Android動畫模板

Android動畫模板

1.ViewAnimation(檢視動畫)

xml方法:
在res目錄下新建anim資料夾,並建立一個xml檔案:

	<?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
    	android:duration="1000"
    	android:fillAfter="true"
    	android:repeatMode="restart">
        <alpha
            android:
fromAlpha
="1" android:toAlpha="0" />
<scale android:fromXScale="1" android:fromYScale="1" android:pivotX="50%" android:pivotY="50%" android:toXScale="2" android:toYScale="2" /> <translate android:
fromXDelta
="0" android:fromYDelta="0" android:toXDelta="50%" android:toYDelta="50%" />
<rotate android:fromDegrees="0" android:pivotX="50%" android:pivotY="50%" android:toDegrees="360" /> </set>

Java程式碼:

		Animation anim = AnimationUtils.loadAnimation(this,R.anim.my_anim);
		anim.setInterpolator(this,android.R.anim.accelerate_decelerate_interpolator);
        findViewById(R.id.image).startAnimation(anim);

注:屬性pivotX/Y,fromX/YDelta,toX/YDelta屬性有三種賦值方式:
1.直接賦予數值,表示軸點在該檢視左上角加上該數值,注意單位是px,不是dp
2.數值a%,表示軸點在該檢視的a%處
3.數值a%p,表示軸點在該檢視的左上角加上父檢視長寬的a%
另Interpolator也可以自定義,其xml檔案也寫在anim目錄下,略。

2.DrawableAnimation(幀動畫)

在res/drawable目錄下建立一個xml檔案如下:

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <item
        android:drawable="@mipmap/lottery_1"
        android:duration="200" />
    <item
        android:drawable="@mipmap/lottery_2"
        android:duration="200" />
    <item
        android:drawable="@mipmap/lottery_3"
        android:duration="200" />
</animation-list>

其中oneshot表示是否迴圈播放
Java程式碼:

		ImageView imageView = ((ImageView)(findViewById(R.id.image)));
        imageView.setImageResource(R.drawable.my_anim);
        AnimationDrawable drawable = (AnimationDrawable) imageView.getDrawable();
        drawable.start();

3.PropertyAnimation(屬性動畫)

ValueAnimator
Java:ofInt(int …)和ofFloat(float …)

		ValueAnimator animator = ValueAnimator.ofInt(0,10,5);
        animator.setDuration(1000);
        animator.setStartDelay(100);
        animator.setRepeatCount(5);
        animator.setRepeatMode(ValueAnimator.REVERSE);
        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator valueAnimator) {
                
            }
        });
        animator.start();

ofObject(TypeEvaluator, Object…):
先定義一個物件,如point; 再實現一個TypeEvaluator

		Point p1 = new Point(0,0);
        Point p2 = new Point(10,10);
        TypeEvaluator evaluator = new TypeEvaluator() {
            @Override
            public Object evaluate(float v, Object o1, Object o2) {
                //v表示動畫完成度
                return null;
            }
        };
        ValueAnimator animator = ValueAnimator.ofObject(evaluator,p1,p2);
        animator.start();

ObjectAnimator

		String property = "alpha"     // rotation    rotationX   translationX    scaleX
		ObjectAnimator animator = ObjectAnimator.ofFloat(View, property", 0f, 1f, 0f);
		animator.setDuration(5000);
		animator.start();