自定義View -屬性動畫Property Animation

ViewPropertyAnimator

package com.zhoujian.retrofit.activity;

import android.animation.Animator;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.ViewPropertyAnimator;
import android.view.animation.AnticipateInterpolator;
import android.view.animation.LinearInterpolator;
import android.widget.ImageView;
import com.zhoujian.retrofit.R;

public class AnimatorActivity extends AppCompatActivity {

    //屬性動畫:ViewPropertyAnimator
    private ViewPropertyAnimator viewPropertyAnimator;

    //屬性動畫:ObjectAnimator
    private ObjectAnimator objectAnimator;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_animator);
        ImageView imageView = (ImageView) findViewById(R.id.image);

        //屬性動畫:ViewPropertyAnimator
          properAnimation(imageView);

        //屬性動畫:ObjectAnimator
        //objectAnimation(imageView);


    }

    /**
     * 屬性動畫:ObjectAnimator
     *
     * @param imageView
     */
    private void objectAnimation(ImageView imageView) {

        objectAnimator = ObjectAnimator.ofFloat(imageView, "translationX", 100);
        //設置動畫時長
        objectAnimator.setDuration(500);
        //設置動畫重複模式
        objectAnimator.setRepeatMode(ValueAnimator.REVERSE);
        //設置動畫是否自動取消
        objectAnimator.setAutoCancel(true);
        //設置動畫延時執行
        objectAnimator.setStartDelay(100);
        //設置動畫重複次數
        objectAnimator.setRepeatCount(2);
        //動畫插值器
        objectAnimator.setInterpolator(new LinearInterpolator());
        //動畫暫停的監聽
        objectAnimator.addPauseListener(new Animator.AnimatorPauseListener() {
            @Override
            public void onAnimationPause(Animator animation) {

            }

            @Override
            public void onAnimationResume(Animator animation) {

            }
        });
        //動畫更新的監聽
        objectAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {

            }
        });

        //動畫設置監聽
        objectAnimator.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animation) {

            }

            @Override
            public void onAnimationEnd(Animator animation) {

            }

            @Override
            public void onAnimationCancel(Animator animation) {

            }

            @Override
            public void onAnimationRepeat(Animator animation) {

            }
        });
        //開始動畫
        objectAnimator.start();

    }

    /**
     * 屬性動畫:ViewPropertyAnimator
     *
     * @param imageView
     */
    private void properAnimation(ImageView imageView) {
        //獲取屬性動畫
        viewPropertyAnimator = imageView.animate();
        //沿X軸,向右移動100像素
        viewPropertyAnimator.translationX(100);
        //設置動畫時長
        viewPropertyAnimator.setDuration(500);
        //設置動畫插值器:線性插值器,勻速
        viewPropertyAnimator.setInterpolator(new AnticipateInterpolator());
        //設置動畫延時執行
        viewPropertyAnimator.setStartDelay(100);
        //設置動畫更新監聽
        viewPropertyAnimator.setUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {

            }
        });

        //動畫開始時被調用
        viewPropertyAnimator.withStartAction(new Runnable() {
            @Override
            public void run() {

            }
        });

        //動畫結束時被調用
        viewPropertyAnimator.withEndAction(new Runnable() {
            @Override
            public void run() {

            }
        });

        //設置動畫監聽
        viewPropertyAnimator.setListener(new Animator.AnimatorListener() {
            /**
             * 動畫開始
             * @param animation
             */
            @Override
            public void onAnimationStart(Animator animation) {

            }

            /**
             * 動畫結束
             * @param animation
             */
            @Override
            public void onAnimationEnd(Animator animation) {

            }

            /**
             * 動畫取消
             * @param animation
             */
            @Override
            public void onAnimationCancel(Animator animation) {

            }

            /**
             * 動畫重複執行
             * @param animation
             */
            @Override
            public void onAnimationRepeat(Animator animation) {

            }
        });
    }
}

 

ObjectAnimator

使用方式:

如果是自定義控件,需要添加setter / getter 方法

使用ObjectAnimator.ofxxx() 創建ObjectAnimator對象

start() 方法執行動畫

package com.zhoujian.retrofit.activity;

import android.animation.Animator;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.ViewPropertyAnimator;
import android.view.animation.AnticipateInterpolator;
import android.view.animation.LinearInterpolator;
import android.widget.ImageView;
import com.zhoujian.retrofit.R;

public class AnimatorActivity extends AppCompatActivity {

    //屬性動畫:ViewPropertyAnimator
    private ViewPropertyAnimator viewPropertyAnimator;

    //屬性動畫:ObjectAnimator
    private ObjectAnimator objectAnimator;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_animator);
        ImageView imageView = (ImageView) findViewById(R.id.image);

        //屬性動畫:ViewPropertyAnimator
        //properAnimation(imageView);

        //屬性動畫:ObjectAnimator
        objectAnimation(imageView);


    }

    /**
     * 屬性動畫:ObjectAnimator
     *
     * @param imageView
     */
    private void objectAnimation(ImageView imageView) {

        objectAnimator = ObjectAnimator.ofFloat(imageView, "translationX", 100);
        //設置動畫時長
        objectAnimator.setDuration(500);
        //設置動畫重複模式
        objectAnimator.setRepeatMode(ValueAnimator.REVERSE);
        //設置動畫是否自動取消
        objectAnimator.setAutoCancel(true);
        //設置動畫延時執行
        objectAnimator.setStartDelay(100);
        //設置動畫重複次數
        objectAnimator.setRepeatCount(2);
        //動畫插值器
        objectAnimator.setInterpolator(new LinearInterpolator());
        //動畫暫停的監聽
        objectAnimator.addPauseListener(new Animator.AnimatorPauseListener() {
            @Override
            public void onAnimationPause(Animator animation) {

            }

            @Override
            public void onAnimationResume(Animator animation) {

            }
        });
        //動畫更新的監聽
        objectAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {

            }
        });

        //動畫設置監聽
        objectAnimator.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animation) {

            }

            @Override
            public void onAnimationEnd(Animator animation) {

            }

            @Override
            public void onAnimationCancel(Animator animation) {

            }

            @Override
            public void onAnimationRepeat(Animator animation) {

            }
        });
        //開始動畫
        objectAnimator.start();

    }

    /**
     * 屬性動畫:ViewPropertyAnimator
     *
     * @param imageView
     */
    private void properAnimation(ImageView imageView) {
        //獲取屬性動畫
        viewPropertyAnimator = imageView.animate();
        //沿X軸,向右移動100像素
        viewPropertyAnimator.translationX(100);
        //設置動畫時長
        viewPropertyAnimator.setDuration(500);
        //設置動畫插值器:線性插值器,勻速
        viewPropertyAnimator.setInterpolator(new AnticipateInterpolator());
        //設置動畫延時執行
        viewPropertyAnimator.setStartDelay(100);
        //設置動畫更新監聽
        viewPropertyAnimator.setUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {

            }
        });

        //動畫開始時被調用
        viewPropertyAnimator.withStartAction(new Runnable() {
            @Override
            public void run() {

            }
        });

        //動畫結束時被調用
        viewPropertyAnimator.withEndAction(new Runnable() {
            @Override
            public void run() {

            }
        });

        //設置動畫監聽
        viewPropertyAnimator.setListener(new Animator.AnimatorListener() {
            /**
             * 動畫開始
             * @param animation
             */
            @Override
            public void onAnimationStart(Animator animation) {

            }

            /**
             * 動畫結束
             * @param animation
             */
            @Override
            public void onAnimationEnd(Animator animation) {

            }

            /**
             * 動畫取消
             * @param animation
             */
            @Override
            public void onAnimationCancel(Animator animation) {

            }

            /**
             * 動畫重複執行
             * @param animation
             */
            @Override
            public void onAnimationRepeat(Animator animation) {

            }
        });
    }
}

 

通用的插值器:

LinearInterpolator:線性插值器:勻速

AccelerateDecelerateInterpolator:先加速後減速

AccelerateInterpolator:持續加速

DecelerateInterpolator:持續減速

AnticipateInterpolator:先回拉一下在進行正常的動畫軌跡

OvershootInterpolator:有回彈效果的運動軌跡

AnticipateOvershootInterpolator:開始前回拉,超過回彈

BounceInterpolator:彈跳效果的運動軌跡

CycleInterpolator:餘弦曲線

PathInterpolator:自定義動畫完成度

FastOutLinearInInterpolator:加速運動

        // FastOutSlowInInterpolator:先加速再減速

        // LinearOutSlowInInterpolator:持續減速

 

 

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