1.第一页
package com.example.propertyanimdemo;
import android.animation.Animator;
import android.animation.ArgbEvaluator;
import android.animation.ValueAnimator;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.BounceInterpolator;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
/**
* 开始
*/
private Button mBt;
/**
* Hello World!
*/
private TextView mTv;
/**
* 停止动画
*/
private Button mBtStop;
private ValueAnimator valueAnimator;
/**
* 变色
*/
private Button mBtColor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
mBt = (Button) findViewById(R.id.bt);
mBt.setOnClickListener(this);
mTv = (TextView) findViewById(R.id.tv);
mTv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "我被点击了", Toast.LENGTH_SHORT).show();
}
});
mBtStop = (Button) findViewById(R.id.btStop);
mBtStop.setOnClickListener(this);
mBtColor = (Button) findViewById(R.id.btColor);
mBtColor.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
default:
break;
case R.id.bt:
// method1();
method2();
break;
case R.id.btStop:
if (valueAnimator != null) {
valueAnimator.cancel();//动画运行到什么地方,就停到什么地方
//valueAnimator.end();//停止动画时,组件停到终止的位置
}
break;
case R.id.btColor:
method3();
break;
}
}
/**
* 颜色变换
*/
private void method3() {
ValueAnimator valueAnimator = ValueAnimator.ofInt(0xffff0000, 0xff0000ff);
//设置计算器
valueAnimator.setEvaluator(new ArgbEvaluator());
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
int value = (int) animation.getAnimatedValue();
mTv.setBackgroundColor(value);
}
});
valueAnimator.setDuration(3000);
valueAnimator.start();
}
/**
* 常用api
*/
private void method2() {
//创建ValueAnimator
valueAnimator = ValueAnimator.ofInt(0, 400);
//设置动画时间
valueAnimator.setDuration(3000);
//设置插值器
valueAnimator.setInterpolator(new BounceInterpolator());
//添加监听,给组件设置动画
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
int animatedValue = (int) animation.getAnimatedValue();
// Log.e("MainActivity", "animatedValue:" + animatedValue);
mTv.layout(animatedValue, animatedValue, animatedValue + mTv.getWidth(), animatedValue + mTv
.getHeight());
}
});
//监听动画状态
valueAnimator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
Toast.makeText(MainActivity.this, "onAnimationStart", Toast.LENGTH_SHORT).show();
}
@Override
public void onAnimationEnd(Animator animation) {
Toast.makeText(MainActivity.this, "onAnimationEnd", Toast.LENGTH_SHORT).show();
}
@Override
public void onAnimationCancel(Animator animation) {
Toast.makeText(MainActivity.this, "onAnimationCancel", Toast.LENGTH_SHORT).show();
}
@Override
public void onAnimationRepeat(Animator animation) {
Toast.makeText(MainActivity.this, "onAnimationRepeat", Toast.LENGTH_SHORT).show();
}
});
//设置循环次数
// valueAnimator.setRepeatCount(ValueAnimator.INFINITE);
//设置循环动画模式
valueAnimator.setRepeatMode(ValueAnimator.REVERSE);
//设置延迟时间
// valueAnimator.setStartDelay(2000);
//开始动画
valueAnimator.start();
}
private void method1() {
TranslateAnimation translateAnimation = new TranslateAnimation(Animation.ABSOLUTE, 0, Animation.ABSOLUTE,
400, Animation.ABSOLUTE, 0, Animation
.ABSOLUTE, 400);
translateAnimation.setDuration(3000);
//动画结束后,停止到最后的位置
translateAnimation.setFillAfter(true);
//开始动画
mTv.startAnimation(translateAnimation);
}
}
2.第二页
package com.example.propertyanimdemo;
import android.animation.TypeEvaluator;
import android.animation.ValueAnimator;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.view.animation.Interpolator;
import android.widget.Button;
import android.widget.TextView;
public class SecondActivity extends AppCompatActivity implements View.OnClickListener {
/**
* 开始
*/
private Button mBt;
/**
* Hello World!
*/
private TextView mTv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
initView();
}
private void initView() {
mBt = (Button) findViewById(R.id.bt);
mBt.setOnClickListener(this);
mTv = (TextView) findViewById(R.id.tv);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
default:
break;
case R.id.bt:
method2();
break;
}
}
private void method2() {
ValueAnimator valueAnimator = ValueAnimator.ofObject(new MyEvaluator(), new Character('A'), new Character('Z'));
valueAnimator.setInterpolator(new MyInterpolator());
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
Character c = (Character) animation.getAnimatedValue();
mTv.setText(c.toString());
}
});
valueAnimator.setDuration(5000);
valueAnimator.start();
}
private void method1() {
ValueAnimator valueAnimator = ValueAnimator.ofInt(0, 400);
valueAnimator.setInterpolator(new MyInterpolator());
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
int animatedValue = (int) animation.getAnimatedValue();
mTv.layout(animatedValue, animatedValue, animatedValue + mTv.getWidth(), animatedValue + mTv
.getHeight());
}
});
valueAnimator.setDuration(2000);
valueAnimator.start();
}
class MyInterpolator implements Interpolator {
@Override
public float getInterpolation(float input) {
Log.e("MyInterpolator", "input:" + input);
return input;
}
}
class MyEvaluator implements TypeEvaluator<Character> {
@Override
public Character evaluate(float fraction, Character startValue, Character endValue) {
Log.e("MyInterpolator", "fraction:" + fraction + " startValue:" + (int) startValue + " endValue:" + (int)
endValue);
//return 起始值+fraction*(结束值-起始值)
int start = (int) startValue;
int end = (int) endValue;
int curInt = (int)(start + fraction *(end - start));
char result = (char)curInt;
return result;
}
}
}
3.第三页
package com.example.propertyanimdemo;
import android.animation.ObjectAnimator;
import android.animation.PropertyValuesHolder;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class ThirdActivity extends AppCompatActivity implements View.OnClickListener {
/**
* 位移
*/
private Button mBtTrans;
/**
* 旋转
*/
private Button mBtRotate;
/**
* 渐变
*/
private Button mBtAlpha;
/**
* 缩放
*/
private Button mBtScale;
/**
* Hello World!
*/
private TextView mTv;
/**
* 组合
*/
private Button mBtZuhe;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_third);
initView();
}
private void initView() {
mBtTrans = (Button) findViewById(R.id.btTrans);
mBtTrans.setOnClickListener(this);
mBtRotate = (Button) findViewById(R.id.btRotate);
mBtRotate.setOnClickListener(this);
mBtAlpha = (Button) findViewById(R.id.btAlpha);
mBtAlpha.setOnClickListener(this);
mBtScale = (Button) findViewById(R.id.btScale);
mBtScale.setOnClickListener(this);
mTv = (TextView) findViewById(R.id.tv);
mBtZuhe = (Button) findViewById(R.id.btZuhe);
mBtZuhe.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
default:
break;
case R.id.btTrans:
trans();
break;
case R.id.btRotate:
rotate();
break;
case R.id.btAlpha:
alpha();
break;
case R.id.btScale:
scale();
break;
case R.id.btZuhe:
zuhe();
break;
}
}
public void zuhe() {
PropertyValuesHolder trans = PropertyValuesHolder.ofFloat(View.TRANSLATION_X, 0, 200f);
PropertyValuesHolder rotate = PropertyValuesHolder.ofFloat(View.ROTATION_Y, 0, 180f);
PropertyValuesHolder alpha = PropertyValuesHolder.ofFloat(View.ALPHA, 0, 1f, 0.5f);
PropertyValuesHolder scale = PropertyValuesHolder.ofFloat(View.SCALE_Y, 1f, 2f);
//给mTv添加了多种动画
ObjectAnimator objectAnimator = ObjectAnimator.ofPropertyValuesHolder(mTv, trans, rotate, alpha, scale);
objectAnimator.setDuration(3000);
objectAnimator.start();
}
private void trans() {
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(mTv, View.TRANSLATION_X, 0, 200f);
objectAnimator.setDuration(3000);
objectAnimator.start();
}
private void rotate() {
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(mTv, View.ROTATION_Y, 0, 180f);
objectAnimator.setDuration(3000);
objectAnimator.start();
}
private void alpha() {
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(mTv, View.ALPHA, 0, 1f, 0.5f);
objectAnimator.setDuration(3000);
objectAnimator.start();
}
private void scale() {
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(mTv, View.SCALE_Y, 2f);
objectAnimator.setDuration(3000);
objectAnimator.start();
}
}
4.第四页
package com.example.propertyanimdemo;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class ForthActivity extends AppCompatActivity implements View.OnClickListener {
private Button mBt;
/**
* tv1
*/
private TextView mTv1;
private TextView mTv2;
/**
* tv3
*/
private TextView mTv3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_forth);
initView();
}
private void initView() {
mBt = (Button) findViewById(R.id.bt);
mBt.setOnClickListener(this);
mTv1 = (TextView) findViewById(R.id.tv1);
mTv2 = (TextView) findViewById(R.id.tv2);
mTv3 = (TextView) findViewById(R.id.tv3);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
default:
break;
case R.id.bt:
method2();
break;
}
}
private void method2() {
ObjectAnimator tv1 = ObjectAnimator.ofFloat(mTv1, View.TRANSLATION_Y, 0f, 400f);
ObjectAnimator tv2 = ObjectAnimator.ofFloat(mTv2, View.TRANSLATION_Y, 0f, 400f);
ObjectAnimator tv3 = ObjectAnimator.ofFloat(mTv3, View.TRANSLATION_Y, 0f, 400f);
//该对象用于添加联合动画
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.play(tv1)
.before(tv3)
.after(tv2);
animatorSet.setDuration(2000);
animatorSet.start();
}
/**
* 两个组件动画一起执行
*/
private void method1() {
ObjectAnimator tv1 = ObjectAnimator.ofFloat(mTv1, View.TRANSLATION_Y, 0f, 400f);
ObjectAnimator tv2 = ObjectAnimator.ofFloat(mTv2, View.TRANSLATION_Y, 0f, 400f);
//该对象用于添加联合动画
AnimatorSet animatorSet = new AnimatorSet();
//animatorSet.playTogether(tv1, tv2);//两个组件一起执行动画
animatorSet.playSequentially(tv1, tv2);//一个接一个执行动画
animatorSet.setDuration(2000);
animatorSet.start();
}
}