美文网首页
GestureDetector 是手势识别的组件

GestureDetector 是手势识别的组件

作者: 爱吃豆包 | 来源:发表于2022-01-14 23:11 被阅读0次

    GestureDetector 是手势识别的组件,可以识别点击、双击、长按事件、拖动、缩放等手势。

    #点击事件

    点击相关事件包括:

    • onTapDown:按下时回调。

    • onTapUp:抬起时回调。

    • onTap:点击事件回调。

    • onTapCancel:点击取消事件回调。

    用法如下:

    GestureDetector(
          onTapDown: (TapDownDetails tapDownDetails) {
            print('onTapDown');
          },
          onTapUp: (TapUpDetails tapUpDetails) {
            print('onTapUp');
          },
          onTap: () {
            print('onTap');
          },
          onTapCancel: () {
            print('onTapCancel');
          },
          child: Center(
            child: Container(
              width: 200,
              height: 200,
              color: Colors.red,
            ),
          ),
        )
    
    

    按下然后抬起调用顺序:

    onTapDown-> onTapUp-> onTap
    
    

    按下后移动的调用顺序:

    onTapDown-> onTapCancel
    
    

    这种情况下不在调用onTapUp和onTap。

    #双击事件

    双击是快速且连续2次在同一个位置点击,双击监听使用onDoubleTap方法,用法如下:

    GestureDetector(
      onDoubleTap: ()=>print('onDoubleTap'),
      child: Center(
        child: Container(
          width: 200,
          height: 200,
          color: Colors.red,
        ),
      ),
    )
    
    

    当同时监听onTap和onDoubleTap事件时,只会触发一个事件,如果触发onTap事件,onTap将会延迟触发(延迟时间为系统判断是onDoubleTap事件的间隔),因为系统将会等待一段时间来判断是否为onDoubleTap事件,如果用户只监听了onTap事件则没有延迟。

    #长按事件

    长按事件(LongPress)包含长按开始、移动、抬起、结束事件,说明如下:

    • onLongPressStart:长按开始事件回调。

    • onLongPressMoveUpdate:长按移动事件回调。

    • onLongPressUp:长按抬起事件回调。

    • onLongPressEnd:长按结束事件回调。

    • onLongPress:长按事件回调。

    GestureDetector(
      onLongPressStart: (v) => print('onLongPressStart'),
      onLongPressMoveUpdate: (v) => print('onLongPressMoveUpdate'),
      onLongPressUp: () => print('onLongPressUp'),
      onLongPressEnd: (v) => print('onLongPressEnd'),
      onLongPress: () => print('onLongPress'),
      child: Center(
        child: Container(
          width: 200,
          height: 200,
          color: Colors.red,
        ),
      ),
    )
    
    

    用户按下->移动->抬起的过程调用如下:

    onLongPressStart->onLongPress->onLongPressMoveUpdate->... ->onLongPressMoveUpdate-> onLongPressEnd-> onLongPressUp
    
    

    #水平/垂直拖动事件

    垂直/水平拖动事件包括按下、开始、移动更新、结束、取消事件,以垂直为例说明如下:

    • onVerticalDragDown:垂直拖动按下事件回调

    • onVerticalDragStart:垂直拖动开始事件回调

    • onVerticalDragUpdate:指针移动更新事件回调

    • onVerticalDragEnd:垂直拖动结束事件回调

    • onVerticalDragCancel:垂直拖动取消事件回调

    GestureDetector(
      onVerticalDragStart: (v) => print('onVerticalDragStart'),
      onVerticalDragDown: (v) => print('onVerticalDragDown'),
      onVerticalDragUpdate: (v) => print('onVerticalDragUpdate'),
      onVerticalDragCancel: () => print('onVerticalDragCancel'),
      onVerticalDragEnd: (v) => print('onVerticalDragEnd'),
      child: Center(
        child: Container(
          width: 200,
          height: 200,
          color: Colors.red,
        ),
      ),
    )
    
    

    用户垂直方向拖动调用顺序如下:

    onVerticalDragDown->onVerticalDragStart->onVerticalDragUpdate-> … -> onVerticalDragUpdate-> onVerticalDragEnd。
    
    

    #缩放事件

    缩放(Scale)包含缩放开始、更新、结束。说明如下:

    • onScaleStart:缩放开始事件回调。

    • onScaleUpdate:缩放更新事件回调。

    • onScaleEnd:缩放结束事件回调。

    GestureDetector(
      onScaleStart: (v) => print('onScaleStart'),
      onScaleUpdate: (ScaleUpdateDetails v) => print('onScaleUpdate'),
      onScaleEnd: (v) => print('onScaleEnd'),
      child: Center(
        child: Container(
          width: 200,
          height: 200,
          color: Colors.red,
        ),
      ),
    )
    
    

    缩放需要2个指针,对于手机就是2个手指进行缩放操作,调用顺序如下:

    onScaleStart->onScaleUpdate->…->onScaleUpdate->onScaleEnd
    
    

    相关文章

      网友评论

          本文标题:GestureDetector 是手势识别的组件

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