水平滚动视图上的 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): 移动>
你必须使用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 事件,但不执行通常执行的任何操作。