Flutter中的点击、拖动和其它手势
介绍
Pointers
手势
手势消歧
介绍
本文档介绍了如何在Flutter中监听并响应手势(点击、拖动和缩放)。

Flutter中的手势系统有两个独立的层。第一层有原始指针(pointer)事件,它描述了屏幕上指针(例如,触摸,鼠标和触控笔)的位置和移动。 第二层有手势,描述由一个或多个指针移动组成的语义动作。

Pointers
指针(Pointer)代表用户与设备屏幕交互的原始数据。有四种类型的指针事

PointerDownEvent 指针接触到屏幕的特定位置
PointerMoveEvent 指针从屏幕上的一个位置移动到另一个位置
PointerUpEvent 指针停止接触屏幕
PointerCancelEvent 指针的输入事件不再针对此应用(事件取消)
在指针按下时,框架对您的应用程序执行_命中测试_,以确定指针与屏幕相接的位置存在哪些widget。 指针按下事件(以及该指针的后续事件)然后被分发到由_命中测试_发现的最内部的widget。 从那里开始,这些事件会冒泡在widget树中向上冒泡,这些事件会从最内部的widget被分发到到widget根的路径上的所有小部件(译者语:这和web中事件冒泡机制相似), 没有机制取消或停止冒泡过程(译者语:这和web不同,web中的时间冒泡是可以停止的)。

To listen to pointer events directly from the widgets layer, use a Listener widget. However, generally, consider using gestures (as discussed below) instead. 要直接从widget层监听指针事件,可以使用Listenerwidget。 但是,通常,请考虑使用手势(如下所述)

手势
手势表示可以从多个单独的指针事件(甚至可能是多个单独的指针)识别的语义动作(例如,轻敲,拖动和缩放)。 完整的一个手势可以分派多个事件,对应于手势的生命周期(例如,拖动开始,拖动更新和拖动结束):

Tap
onTapDown 指针已经在特定位置与屏幕接触
onTapUp 指针停止在特定位置与屏幕接触
onTap tap事件触发
onTapCancel 先前指针触发的onTapDown不会在触发tap事件
双击
onDoubleTap 用户快速连续两次在同一位置轻敲屏幕.
长按
onLongPress 指针在相同位置长时间保持与屏幕接触
垂直拖动
onVerticalDragStart 指针已经与屏幕接触并可能开始垂直移动
onVerticalDragUpdate 指针与屏幕接触并已沿垂直方向移动.
onVerticalDragEnd 先前与屏幕接触并垂直移动的指针不再与屏幕接触,并且在停止接触屏幕时以特定速度移动
水平拖动
onHorizontalDragStart 指针已经接触到屏幕并可能开始水平移动
onHorizontalDragUpdate 指针与屏幕接触并已沿水平方向移动
onHorizontalDragEnd 先前与屏幕接触并水平移动的指针不再与屏幕接触,并在停止接触屏幕时以特定速度移动
要从widget层监听手势,请使用 GestureDetector.

如果您使用的是Material Components,那么大多数widget已经对tap或手势做出了响应。 例如 IconButton和 FlatButton 响应presses(taps),ListView响应滑动事件触发滚动。 如果您不使用这些widget,但想要在点击时上出现“墨水飞溅”效果,可以使用InkWell。

手势消歧
在屏幕上的指定位置,可能会有多个手势检测器。所有这些手势检测器在指针事件流经过并尝试识别特定手势时监听指针事件流。 GestureDetectorwidget决定是哪种手势。

当屏幕上给定指针有多个手势识别器时,框架通过让每个识别器加入一个“手势竞争场”来确定用户想要的手势。“手势竞争场”使用以下规则确定哪个手势胜出

在任何时候,识别者都可以宣布失败并离开“手势竞争场”。如果在“竞争场”中只剩下一个识别器,那么该识别器就是赢家

在任何时候,识别者都可以宣布胜利,这会导致胜利,并且所有剩下的识别器都会失败

例如,在消除水平和垂直拖动的歧义时,两个识别器在接收到指针向下事件时进入“手势竞争场”。识别器观察指针移动事件。 如果用户将指针水平移动超过一定数量的逻辑像素,则水平识别器将声明胜利,并且手势将被解释为水平拖拽。 类似地,如果用户垂直移动超过一定数量的逻辑像素,垂直识别器将宣布胜利。

当只有水平(或垂直)拖动识别器时,“手势竞争场”是有益的。在这种情况下,“手势竞争场”将只有一个识别器,并且水平拖动将被立即识别,这意味着水平移动的第一个像素可以被视为拖动,用户不需要等待进一步的手势消歧。

项目源码github

您还可以看看下面的博客文章,回顾以前和继续学习,包含我在学习开发中遇到的难题等等

如对您有帮助,欢迎starts 谢谢。下面是我自己写的demo 可以看看 一块学习:

Flutter入门,学习历程,进入开发,在安卓手机运行起来
Visual Studio code工具开发flutte总结
Flutter 跨平台开发 为什么选择Flutter
跨平台开发 为什么选择Flutter
Android 开发者 for Flutter (1)Flutter和Android中的View对比及如何更新widget
Android 开发者 for Flutter (2)如何布局? XML layout 文件跑哪去了?及布局中添加或删除组件
Android 开发者 for Flutter (3) flutter中动画是如何实现的 及 如何使用Canvas draw/paint
Flutter轮播图编写(两种方式)CarouselSlider和PageView(自动轮播,也可以手动左右拖拽)
flutter 中tabbar切换上下均可,banner轮播图,listview刷新添加更多,listview嵌套gridview
Flutter 项目编写 第三方插件库文件引入,本地图片 json数据引入解析
flutter run 运行项目 所遇到的问题总结(Scaffold加padding及 flutter/material.dart’;爆红问题解决;listview嵌套gridview滑动问题)
Flutter 中 如何构建自定义 Widgets
安卓Intent在Flutter中等价于什么?及数据传输和startActivityForResult 在Flutter中等价于什么
异步UI runOnUiThread 在Flutter中等价于什么
AsyncTask和IntentService在Flutter中等价于什么
OkHttp在Flutter中等价于什么

感谢Flutter中文网

Flutter中的点击、拖动和其它手势相关推荐

  1. Flutter使用入门学习之Flutter中的点击、拖动和其它手势

    Flutter中的手势系统有两个独立的层. 第一层有原始指针(pointer)事件,它描述了屏幕上指针(例如,触摸,鼠标和触控笔)的位置和移动. 第二层有手势,描述由一个或多个指针移动组成的语义动作. ...

  2. Flutter ListView 列表点击和网页加载

    上一篇讲了使用ListView加载列表数据,本篇,我们讲下列表项的点击,因为本篇的例子点击后是加载一个网页,所以本篇也讲下类似于Android的WebView和iOS的UIWebView加载网页.效果 ...

  3. Flutter 中文文档:点击、拖动和其他手势

    这个章节将会讲解如何监听和响应 Flutter 的手势操作 gestures.典型的手势操作包括点击.拖动和缩放. Flutter 中的手势有两个不同的层次:第一层是原始的指针指向事件,描述了屏幕上由 ...

  4. Flutter进阶—点击、拖动和其他手势

    Flutter中的手势系统有两个层次.第一层具有原始指针事件,其描述了穿过屏幕的指针(例如触摸.鼠标和触控笔)的位置和移动.第二层具有手势,其描述由一个或多个指针移动组成的语义动作. 指针 指针代表用 ...

  5. flutter 拖拽布局_使用Flutter模仿SOUL可任意拖动的悬浮按钮

    在Flutter中,我们可以两种方式实现小部件对拖动效果 GestureDetector() Draggable() GestureDetector 在开发过程中经常使用到GestureDetecto ...

  6. 在 Flutter 中自定义画笔 Painter

    在 Flutter 中自定义画笔 Painter 前言 今天我们将讨论定制 Painter,首先我们将看看什么时候使用定制 Painter,定制 Painter 是如何工作的,最后但并非最不重要的是, ...

  7. flutter中的路由跳转

    在前面的基本路由和命名路由中,都演示了如何进行路由跳转,并且在路由跳转以后,可以借用系统自带的按钮就行返回上一级,当然了,也可以自定义按钮返回上一级. 返回上一级 在前面的例子中,当从Home.dar ...

  8. 一招教会你处理Flutter中的数据

    目录传送门:<Flutter快速上手指南>先导篇 在一个 App 中,数据类是必不可少. 我们需要从接口请求数据(通常为 JSON 格式),然后解析成对象,再使用它. 看看在 Flutte ...

  9. flutter中的生命周期函数

    前言:生命周期是一个组件加载到卸载的整个周期,熟悉生命周期可以让我们在合适的时机做该做的事情, flutter中的State生命周期和android以及React Native的生命周期类似. 先看一 ...

最新文章

  1. 网友抱怨:「苹果除了每年收我的钱,似乎什么都不想做」
  2. php 效率最高的递归,PHP 递归效率分析_PHP教程 - microtime
  3. 没听说过“羽毛球VR”计划?嗯?
  4. python 字符串反转
  5. fedora 20   无法打开wifi
  6. Linux java集成安装环境,Linux下Java环境安装
  7. DDR3布线的那些事儿(二)
  8. 7-6 区间覆盖 (10 分)(思路+详解)Come 宝!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  9. centos7 geenplum5.x postgis开源版本编译
  10. 两数之和python哈希_LeetCode-python 1.两数之和
  11. 期刊投稿状态_这些SCI期刊的投稿显示状态是什么意思?
  12. spring管理bean
  13. 蚂蚁金服双 11 大促全面揭秘:百万支付、容器化和平台智能化
  14. 好消息好消息——带计算机课程的希捷移动硬盘发货啦
  15. html下载文件和上传文件(图片)(java后台(HttpServlet))打开保存路径和选择文件录取+(乱码UTF-8)+包...
  16. 数据库多表查询时,返回值该如何接收问题
  17. 5个超厉害的资源搜索网站,每一款都可以让你的资源满满!
  18. Streaming Telemetry翻译学习
  19. JavaFX应用程序图标
  20. NEERC 2014 D题 Damage Assessment

热门文章

  1. 计算机弹歌你的答案,抖音方宇杰答案什么歌 这首歌已经火遍网络了
  2. Java锁——乐观锁与悲观锁
  3. 服务器崩了只剩下数据文件恢复oracle数据库
  4. visio画一个框把需要的流程图框起来
  5. 智能佳-E-PUCK2分布式单体智能集群协作机器人
  6. 标准I/O重定向和管道
  7. 大数据、云计算和物联网,一文看懂这些新兴战略产业!
  8. word涂改涂掉图片_Word对图形照片处理的几个小技巧,很少人知道!
  9. 计算机cmd复制粘贴指令,Win7在命令提示符(cmd.exe)中如何进行复制、粘贴工作
  10. Android自定义类似支付宝密码输入的控件