美文网首页
Android Animation

Android Animation

作者: 米豆同学 | 来源:发表于2019-04-28 23:26 被阅读0次

Choreographer

这个类来控制同步处理输入(Input)、动画(Animation)、绘制(Draw)三个UI操作

postCallback/postFrameCallback流程

将callback放入CallbackQueue中,请求Vsync信号,如果VSync信号到来,调用doFrame执行callbackQueue中的callback,执行顺序是:CALLBACK_INPUT,CALLBACK_ANIMATION,CALLBACK_TRAVERSAL,CALLBACK_COMMIT,然后就会执行post时候传进来的参数Runnable/FrameCallback

属性动画实现原理

      // ValueAnimator
        ValueAnimator valueAnimator = ValueAnimator.ofInt(0, 200, 100);
        valueAnimator.setDuration(3000);
        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                int currentValue = (Integer) animation.getAnimatedValue();
                setX(currentValue);
            }
        });
        valueAnimator.start();

  1. ValueAnimator.ofInt根据传入参数,初始化关键时间百分比对应的值,动画开始后计算属性值使用
  2. valueAnimator.start后,将ValueAnimator放入AnimationHandler 的callback列表中,AnimationHandler会向Choreographer提交这个callback,让这个动画在下一帧执行。
  3. 当前动画开始执行,开始计算属性值变化,通知监听器AnimatorUpdateListener,更新属性信息。如果是ObjectAnimator则通过反射调用“set+属性”,设置对象属性
  4. AnimationHandler判断当前是否有没执行完的动画,如果有继续给Choreographer发送执行动画请求

补间动画原理

View.startAnimation,动画开始重新绘制view以及他的父view,在draw方法中得到动画的变换矩阵,然后直接对canvas进行平移、旋转、缩放,透明度操作

补间动画只是对画布操作,并没有改变view 的任何属性(坐标长宽等),所以只能响应之前位置的输入事件,而属性动画改变了view的坐标,因此可以响应动画之后的位置上的输入事件

    public void startAnimation(Animation animation) {
        animation.setStartTime(Animation.START_ON_FIRST_FRAME);
        setAnimation(animation);
        invalidateParentCaches();
        invalidate(true);
    }

自定义动画必须重写applyTransformation方法实现动画动画效果,将与interpolatedTime时间点对应的变换矩阵存到参数t中,view绘制时(draw)会调用Animation.getTransformation从而对canvas进行操作。

    class RotateAnimation extends Animation{
        @Override
        protected void applyTransformation(float interpolatedTime, Transformation t) {
            super.applyTransformation(interpolatedTime, t);
        }
    }

相关文章

  • Android 动画

    Android 3.0之前已有View动画框架Animation(详见:Android之视图动画Animation...

  • Android之属性动画Animator

    Android 3.0之前已有动画框架Animation(详见:Android之视图动画Animation),但存...

  • Android 动画

    Android 动画类型 Property Animation Property Animation 关键参数 D...

  • 属性动画

    Android提供了几种动画:View Animation 、Drawable Animation 、Proper...

  • 动画

    Android包含三种动画:View Animation(Tween Animation)、 Drawable A...

  • 微信拍照录像自定义view实现

    import android.animation.Animator;import android.animatio...

  • Android 动画

    Android基础动画 Tween Animation 变换动画 Frame Animation 帧动画 Layo...

  • Android之基础动画

    Android基础动画 Tween Animation 变换动画Frame Animation 帧动画Layo...

  • Android属性动画

    1、概述Android常用的动画有View Animation、Drawable Animation、Proper...

  • Android动画

    Android 动画分类 帧动画(Frame Animation) 补间动画(Tweened Animation)...

网友评论

      本文标题:Android Animation

      本文链接:https://www.haomeiwen.com/subject/idjngqtx.html