属性动画简单分析

//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<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();










  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值