属性动画PropertyAnimation

简介

帧动画与补间动画实现了对View进行移动、缩放、旋转和淡入淡出的效果。但对于android开发师来说是不够的,同时移动、缩放、旋转和淡入淡出的效果也不再只是一种视觉上的动画效果了。所以从Android 3.0版本开始,系统给我们提供了一种全新的动画模式,属性动画(property animation)。

1、概述:

  • 属性动画是android3.0以后提供的一种动画实现机制,它可以作用于任何对象,对对象的属性赋值修改,从而实现动画效果。
  • 实现原理:在一定的时间内,通过插值器(动画改变的趋势)与估值器(动画具体变化的数值),不断改变对象的属性,实现动画的效果。

2、与补间动画不同点:

  • 补间动画只改变view的绘制位置,不改变view的属性,比如位置、宽高。所见非所得
  • 属性动画不仅改变view的绘制位置,还改变对象的属性。所见即所得

3、重要类:

  • Animator: 动画的超类,实现了动画的开始结束等状态,以及添加监听。
  • AnimatorSet: 继承Animator,动画的组合类,用于制作一组动画,设置动画执行的先后顺序。
  • ValueAnimator: 继承Animator,动画的执行类。
  • ObjectAnimator: 继承ValueAnimator,动画的执行类。
  • TypeEvaluator: 类型估值,用于设置动画属性的值。
  • TimeInterpolator: 时间插值,用于设置动画的改变趋势。
  • AnimatorInflater: 加载属性动画的xml文件

4、实现方式
1、xml方式:将动画代码写在xml文件

可参照:https://blog.csdn.net/ws614054446/article/details/81289377

2、java代码:

ValueAnimator  animator = ValueAnimator.ofFloat(0, num);
        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                if(animation!=null&&animation.getAnimatedValue()!=null){
                    float animatedValue = (float)animation.getAnimatedValue();
                    WindowManager.LayoutParams params = MascotVrCsdManager.getInstance().getLayoutParams();

                    float startx= 73 ,startY= 148 ,endx = 64 , endY = 18;
                    float xx =  (startx + (endx - startx) * (animatedValue / num));
                    params.x = (int)xx;
                    float yy =  (startY + (endY - startY) * (animatedValue / num));
                    params.y = (int)yy;
                    WindowManager windowManager = MascotVrCsdManager.getInstance().getwindow();
                    if(view.isAttachedToWindow()){ 
                       windowManager.updateViewLayout(view,params);
                    }else {
                        animator.cancel();
                    }
            }
        });

        animator.setDuration(duration);
        animator.start();

 5、补充 ViewPropertyAnimator

直接通过View的animate()方法,执行动画

 //初始化Y轴的偏移量
 mainView.translationY = WINDOW_HEIGHT.toFloat()

 mainView.animate().setInterpolator(PhysicBasedInterpolator(0.99f, 0.76f)).setDuration(500).translationY(0f).setListener(object : MyAnimatorListener() {
     override fun onAnimationEnd(p0: Animator?) {
          LogUtils.i(TAG, "打开的动画结束了")
       }
}).start()

  

 

区别一:需要的Anroid API level不一样

Property Animation需要Android API level 11的支持,而View Animation则是更早期的版本。

区别二:适用范围不一样

Property Animation适用于所有的Object对象,而View Animation则只能应用于View对象。

区别三:XML声明结构、存放目录不一样

Property Animation的XML声明文件存放在res/animator目录下,而View Animation则存放在res/anim目录。具体的XML结构可以查看Animation Resources

区别四:类的继承结构不一样

Property Animation基于Animator和AnimatorSet的类结构,而View Animation则基于Animation和AnimationSet的类结构。
 
posted @ 2016-03-21 17:06  随易来了  阅读(155)  评论(0编辑  收藏  举报