Flutter手势识别

作者: 廖布斯M | 来源:发表于2020-04-12 13:33 被阅读0次

    1:触摸事件来源

    GestureBinding

    2:对事件感兴趣

    对PointerDownEvent进行处理,找出对后续事件感兴趣的target。

    RenderBinding类方法

    依次RenderObject的hitTest方法。

    RenderView类方法

    若是对于该事件感兴趣,则将其加入HitTestResult。也调用children的hitTest方法。

    3:手势识别

    手势识别的基础类是Listener。我们主要关心Listener Widget所对应的RenderObject对象。

    RenderProxyBoxWithHitTestBehavior类

    主要逻辑就是,先检测手指的触摸点是否在该RenderObject范围类。若是则测试children是否关心该事件。(HitTestBehavior的三种类型见文档)

    RawGestureDetector

    RawGestureDetector类使用了Listener,看源码可见,该类只关心pointer down 事件。

    RawGestureDetector

    下面进入手势识别的核心逻辑,为了简单起见,我们以tap手势为例。

    GestureRecognizer PrimaryPointerGestureRecognizer OneSequenceGestureRecognizer

    到此可见,GestureRecognizer最终会像GestureBinding注册一个handleEvent回调。

    我们在此梳理一下,RawGestureDetector对down事件感兴趣,表示对后续事件也感兴趣,借助GestureRecognizer,往GestureBinding注册了handleEvent回调。handleEvent会对后续的move ,up等事件进行处理。

    下一个问题是,GestureBinding如何分发后续事件。

    GestureBinding PointerRouter

    GestureBinding的handleEvent,将后续事件分发给了,之前在GestureRecognizer的addAllowedPointer中添加的Router。

    相关文章

      网友评论

        本文标题:Flutter手势识别

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