美文网首页
自定义View—属性动画源码分析

自定义View—属性动画源码分析

作者: Peakmain | 来源:发表于2020-07-15 20:23 被阅读0次

    使用

            val animator: ObjectAnimator = ObjectAnimator.ofFloat(imageView, "translationX", 1.0f, 0.3f)
            animator.setDuration(345)
            animator.start()
    

    源码分析

    ofFloat源码分析

        public static ObjectAnimator ofFloat(Object target, String propertyName, float... values) {
            ObjectAnimator anim = new ObjectAnimator(target, propertyName);
            anim.setFloatValues(values);
            return anim;
        }
    
    image.png image.png image.png

    start源码分析

    image.png image.png
    image.png
    image.png
    image.png
    image.png

    最终会调到Native层,Native处理完成后触发FrameDisplayEventReceiver的onVsync回调,回调中最后也会调用doFrame(long frameTimeNanos, int frame)方法


    image.png

    如果我们留意我们会发现frameCallback实际是AnimtionHandler中addAnimationFrameCallback传过去的

        public void addAnimationFrameCallback(final AnimationFrameCallback callback, long delay) {
            if (mAnimationCallbacks.size() == 0) {
                getProvider().postFrameCallback(mFrameCallback);
            }
      
        }
    

    mFrameCallback实际是

        private final Choreographer.FrameCallback mFrameCallback = new Choreographer.FrameCallback() {
            @Override
            public void doFrame(long frameTimeNanos) {
                doAnimationFrame(getProvider().getFrameTime());
                if (mAnimationCallbacks.size() > 0) {
                    getProvider().postFrameCallback(this);
                }
            }
        };
    
    image.png

    所以我们发现,这个实际就是一个循环

    相关文章

      网友评论

          本文标题:自定义View—属性动画源码分析

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