Unity: UIWidgets 简明教程系列【“长按”监听】

Unity: UIWidgets 简明教程

长按监听

注意事项:
本教程部分项目参考了 UIWidgets 官方开发样例。
官方样例只有源代码和完整的项目,没有具体的构建步骤和开发过程中遇到的问题的讲解。本教程即在官方样例的基础上做了一定的修改,并辅以要点的讲解,一步一步地构建项目,比较符合初学者学习的思路和习惯。目前教程持续更新中。

在移动端需要监听多种多样的手势操作,不仅仅局限于点击,手势操作还包括短时间内多次点击、长按、多点触控、滑动等等。本节着眼于实现对“长按”事件的监听。

配置好 UIWidgets 开发环境,新建脚本文件 LongPressTest.cs,输入以下代码:

using Unity.UIWidgets.material;
using Unity.UIWidgets.widgets;
using Unity.UIWidgets.engine;
using Unity.UIWidgets.animation;
using UnityEngine;

namespace UIWIdgetsTutorial
{
	public class LongPressTest : UIWidgetsPanel
	{
		protected PageRouteFactory pageRouteBuilder {
			get {
				return (RouteSettings settings, WidgetBuilder builder) =>
					new PageRouteBuilder(
						settings: settings,
						pageBuilder: (BuildContext context, Animation<float> animation,
							Animation<float> secondaryAnimation) => builder(context)
					);
			}
		}

		protected override Widget createWidget()
		{
			return new WidgetsApp(
				home: new LongPressWidget(),
				pageRouteBuilder: this.pageRouteBuilder
			);
		}
	}

	class LongPressWidget : StatefulWidget
	{
		public override State createState()
		{
			return new LongPressWidgetState();
		}
	}

	class LongPressWidgetState : State<LongPressWidget>
	{
		public override Widget build(BuildContext context)
		{
			// GestureDetector 包含了多个有关手势识别的属性,如这里的“长按”手势等。
			// 通过设置这些属性即可设置各种手势的监听器、回调函数等,非常的方便,并且结构很清晰。
			// 运行可以知道这些回调函数的调用顺序为:
			// 1. Long Press(也即 onLongPress 事件)
			// 2. Long Press Drag Start(也即 onLongPressStart 事件)
			// 3. Long Press Drag  Update(如果发生拖动事件,即长按并移动手指或触摸笔等)(也即 onLongPressMoveUpdate 事件)
			// 4. Long Press Up(也即 onLongPressUp 事件)
			// 5. Long Press Drag Up(也即 onLongPressEnd 事件)
			// 或者表述如下:
			// onLongPress -> onLongPressStart -> onLongPressMoveUpdate -> onLongPressUp -> onLongPressEnd
			return new GestureDetector(
				onLongPressStart: (value) => { Debug.Log($"Long Press Drag Start: {value}"); },
				onLongPressMoveUpdate: (value) => { Debug.Log($"Long Press Drag Update: {value}"); },
				onLongPressEnd: (value) => { Debug.Log($"Long Press Drag Up: {value}"); },
				onLongPressUp: () => { Debug.Log($"Long Press Up"); },
				onLongPress: () => { Debug.Log($"Long Press"); },
				child: new Center(
					child: new Container(
						width: 200,
						height: 200,
						color: Colors.blue
					)
				)
			);
		}
	}
}

这里需要特别注意的是最后的 GestureDetector 的各项属性的设置,通过设置这些属性即可指定各种事件对应的回调函数。对应于“长按”事件,有 onLongPressStart、onLongPressMoveUpdate、onLongPressEnd、onLongPressUp 和 onLongPress 等属性,注释中给出了一些简短的说明。

效果

Unity: UIWidgets 简明教程系列【“长按”监听】
可以清晰地看到各种事件触发的先后顺序。

上一篇:vue_过渡_动画


下一篇:前端 vue v-drag 拖拽面板组件 - 戴向天