微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 InteractiveViewer 中使用 GestureDetector

如何解决在 InteractiveViewer 中使用 GestureDetector

是否可以在 InteractiveViewer 内使用 GestureDetector(特别是 onTapUp 手势)?

我知道 InteractiveViewer 使用 GestureDetector 本身并覆盖 onScaleEnd、onScaleStart 和 onScaleUpdate 方法来实现平移。但是,onTapUp 没有被覆盖,这让我觉得有可能使用它。

解决方法

我进行了一些挖掘,并在 toScene() 方法的 InteractiveViewer's TransformationController documentation 中找到了这个:

返回给定视口点的场景点。

视口点是相对于父级的,而场景点是相对于父级的 相对于子,不分变换。调用场景 带有视口点本质上返回场景坐标 位于给定变换的视口点下方。

视口变换为子对象的倒数(即移动 child left 相当于将 viewport 向右移动)。

这种方法在确定事件发生的位置时通常很有用 父母发生在孩子身上。此示例显示如何确定位置 对父级的轻按发生在子级上。

GestureDetector(
    onTapUp: (TapUpDetails details) {
      _childWasTappedAt = _transformationController.toScene(
        details.localPosition,);
    },child: InteractiveViewer(
      transformationController: _transformationController,child: child,),); }

因此,建议的解决方案是将 InteractiveViewer 与 GestureDetector 包装在一起,使用自定义 TransformationController,并从该控制器获取相对于查看器视口的位置,而不是将 GestureDetector 作为子项使用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。