Horizo​​ntalScrollView上的OnTouch事件 - 当控制失去焦点/用户手指失控时

时间:2015-01-02 13:41:35

标签: c# android mono

我有水平滚动视图的图库。当用户滑动滚动视图时,我会收听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'不会跑。问题是如何处理这种情况 - 我想知道何时出现这种情况并以编程方式调用与操作中相同的代码' Up'。

事件列表如下:

  • 01-02 13:53:33.417 I / mono-stdout(6759):OnTouch>向下
  • 01-02 13:53:33.537 I / mono-stdout(6759):OnTouch>移动
  • 01-02 13:53:33.581 I / mono-stdout(6759):OnTouch>移动

1 个答案:

答案 0 :(得分:0)

您必须使用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;
}

public static final int ACTION_CANCEL

  

getActionMasked()的常量:当前手势已中止。   你不会再收到任何积分。你应该把它视为   一个向上的事件,但不执行你通常会采取的任何行动。