//1.-------------属性动画基础-------------------- iv.setTranslationX(100); iv.setScaleX(scaleX); iv.setAlpha(alpha); iv.setRotation(rotation) iv.setBackgroundColor(color); //只要view里面有setXXX()方法就可以通过反射达到变化的目的 ObjectAnimator oa = ObjectAnimator.ofFloat(iv, "translationX", 0f,200f); ObjectAnimator oa = ObjectAnimator.ofFloat(iv, "backgroundColor", Color.RED,Color.BLUE); oa.setDuration(500);
oa.start();
//2.-------------多个动画同时执行---------------------- //方法 1) 设置动画监听,同步操作其他的属性 ObjectAnimator animator = ObjectAnimator.ofFloat(iv, "wu", 0f,100f); // ObjectAnimator animator = ObjectAnimator.ofFloat(iv, "translationX", 0f,100f); animator.setDuration(300); animator.addUpdateListener(new AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { // 监听动画回调 // animation.getAnimatedFraction();//动画执行的百分比 0~1 //API 12+ float value = (float) animation.getAnimatedValue();//得到0f~100f当中的这个时间点对应的值 iv.setScaleX(0.5f+value/200); iv.setScaleY(0.5f+value/200); // iv.setTranslationX(value); } }); animator.start(); animator.setRepeatCount(2); animator.setRepeatCount(ValueAnimator.INFINITE); animator.setRepeatMode(ValueAnimator.RESTART); animator.setRepeatMode(ValueAnimator.REVERSE.) animator.addListener(new AnimatorListener() { @Override public void onAnimationStart(Animator animation) { } @Override public void onAnimationRepeat(Animator animation) { } @Override public void onAnimationEnd(Animator animation) { // animator.setRepeatCount(ValueAnimator.RESTART); } @Override public void onAnimationCancel(Animator animation) { } }); animator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { // TODO Auto-generated method stub super.onAnimationEnd(animation); } }); //方法 2)---------------ValueAnimator---如果只需要监听值变化就用ValueAnimator--------------- ValueAnimator animator = ValueAnimator.ofFloat(0f, 200f); animator.setDuration(200); animator.addUpdateListener(new AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { float value = (float) animation.getAnimatedValue();//得到0f~100f当中的这个时间点对应的值 iv.setScaleX(0.5f+value/200); iv.setScaleY(0.5f+value/200); } }); animator.start(); //方法 3) PropertyValuesHolder holder1 = PropertyValuesHolder.ofFloat("alpha", 1f,0.5f); PropertyValuesHolder holder2 = PropertyValuesHolder.ofFloat("scaleX", 1f,0.5f); PropertyValuesHolder holder3 = PropertyValuesHolder.ofFloat("scaleY", 1f,0.5f); ObjectAnimator animator = ObjectAnimator.ofPropertyValuesHolder(iv, holder1,holder2,holder3); animator.setDuration(200); animator.start(); //方法 4)-------------动画集合----------------- ObjectAnimator animator1 = ObjectAnimator.ofFloat(iv, "translationX", 0f,100f); // animator1.setRepeatCount(3); ObjectAnimator animator2 = ObjectAnimator.ofFloat(iv, "alpha", 0f,1f); // animator2.setStartDelay(startDelay)//设置延迟执行 ObjectAnimator animator3 = ObjectAnimator.ofFloat(iv, "scaleX", 0f,2f); AnimatorSet animatorSet = new AnimatorSet(); animatorSet.setDuration(500); // animatorSet.play(animator3).with(animator2).after(animator1);//animator1在前面 animatorSet.play(animator3).with(animator2).before(animator1);//animator1在后面 // animatorSet.playTogether(animator1,animator2,animator3); animatorSet.playSequentially(animator1,animator2,animator3); animatorSet.start();
//3.-------------估值器用法----------------------
//估值器 // 估值计算方法---可以在执行的过程当中干预改变属性的值---做效果:用自己的算法来控制 //不断地去计算修改坐标 //x匀速运动 x=v*t 为了看起来效果好我让t变成fraction*5 ValueAnimator valueAnimator = new ValueAnimator(); valueAnimator.setInterpolator(new LinearInterpolator()); valueAnimator.setDuration(5000); valueAnimator.setObjectValues(new PointF(0,0)); final PointF pointF = new PointF(); valueAnimator.setEvaluator(new TypeEvaluator() { @Override public PointF evaluate(float fraction, PointF startValue, PointF endValue) { pointF.x = 200 * fraction * 5; pointF.y = 0.5f * 9.8f * (fraction*5) * (fraction*5) ; return pointF; } }); valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { PointF f = (PointF) animation.getAnimatedValue(); iv.setX(f.x); iv.setY(f.y); } }); valueAnimator.start(); //颜色估值器 ValueAnimator valueAnimator = new ValueAnimator(); valueAnimator.setObjectValues(Color.BLUE,Color.RED); valueAnimator.setDuration(2000); valueAnimator.setEvaluator(new ArgbEvaluator()); valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { iv.setBackgroundColor((Integer) animation.getAnimatedValue()); } }); valueAnimator.start();
//4.-------------插值器(加速器)Interpolater---------------------
ObjectAnimator oa = ObjectAnimator.ofFloat(iv, "translationY", 0f,1000f); oa.setDuration(800); oa.setInterpolator(new AccelerateInterpolator()); //加速插值器
oa.setInterpolator(new DecelerateInterpolator()); //减速插值器oa.setInterpolator(new AccelerateDecelerateInterpolator()); //加速减速插值器
oa.setInterpolator(new BounceInterpolator());// 弹跳插值器
oa.setInterpolator(new AnticipateInterpolator()); // 回荡秋千插值器
oa.setInterpolator(new CycleInterpolator(5)); // 正弦周期变换插值器
oa.start();