频道栏目
首页 > 资讯 > 其他 > 正文

属性动画简单分析

17-06-14        来源:[db:作者]  
收藏   我要投稿

属性动画简单分析

//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();
相关TAG标签
上一篇:Android之带你认识并使用Material Design
下一篇:怎么找到最长子串位置
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站