属性动画简单分析

来源:互联网 发布:算王算量软件破解版 编辑:程序博客网 时间:2024/06/04 18:49
//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*5ValueAnimator 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<PointF>() {    @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();