美文网首页
自定义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