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:持續減速