水平滚动视图上的 OnTouch 事件 - 当控制失去焦点/用户手指失控时

本文关键字:焦点 失去 用户 手指 失控 控制 视图 滚动 OnTouch 事件 水平 | 更新日期: 2023-09-27 18:36:08

我有水平滚动视图的画廊。当用户滑动滚动视图时,我监听 OnTouch 事件并播放动画等。

基本上:

public bool OnTouch(Android.Views.View v, Android.Views.MotionEvent e)
{
    switch (e.Action)
    {
        case MotionEventActions.Down:
            System.Console.WriteLine("OnTouch > Down");
            // Start Animation (change alpha imageviews in list to 100%)
            break;
        case MotionEventActions.Move:
            System.Console.WriteLine("OnTouch > Move");
            // Do something...
            break;
        case MotionEventActions.Up:
            System.Console.WriteLine("OnTouch > Up");
            // End Animation (change alpha imageviews in list to 50%)
            break;
    }
    return true;
}

但是,用户可以选择在控件中启动 OnTouch 事件,但在将触摸移动到焦点控件之外时结束。因此,操作"向上"不会运行。问题是如何处理这种情况 - 我想知道这种情况何时会出现,并以编程方式调用与操作中相同的代码"Up"。

所以事件列表看起来像:

  • 01-02 13:53:33.417 I/单声道标准输出(6759): 向下>
  • 01-02 13:53:33.537 I/单声道标准输出(6759): 移动>
  • 01-02 13:53:33.581 I/单声道标准输出(6759): 移动>

水平滚动视图上的 OnTouch 事件 - 当控制失去焦点/用户手指失控时

你必须使用MotionEventActions.Cancel

public bool OnTouch(Android.Views.View v, Android.Views.MotionEvent e)
{
    switch (e.Action)
    {
        case MotionEventActions.Down:
            System.Console.WriteLine("OnTouch > Down");
            // Start Animation (change alpha imageviews in list to 100%)
            break;
        case MotionEventActions.Move:
            System.Console.WriteLine("OnTouch > Move");
            // Do something...
            break;
        case MotionEventActions.Up:
            System.Console.WriteLine("OnTouch > Up");
            // End Animation (change alpha imageviews in list to 50%)
            break;
        case MotionEventActions.Cancel:
            System.Console.WriteLine("OnTouch > Cancel");
            // End Animation (change alpha imageviews in list to 50%)
            break;
    }
    return true;
}

公共静态最终 int ACTION_CANCEL

getActionMasked() 的常量:当前手势已中止。 您将不会再获得任何积分。您应该将其视为 一个 up 事件,但不执行通常执行的任何操作。