SKCanvasView事件参数仅包含Pressed操作类型



My Sample自定义控件继承自SKCanvaView并重写OnTouch方法。它简单地打印到Debug流操作类型中,但是,操作类型始终是Pressed的类型。

根据我的理解,我应该得到像PressedReleasedMovedCancel这样的动作类型。为什么我只得到Pressed操作类型

版本信息:

Xamarin.Forms v5.0.0.2012
SkiaSharp.Views.Forms v2.80.2

在Hyper-V中运行的Android设备和物理设备上进行了测试,结果相同。

using SkiaSharp.Views.Forms;
namespace PurpleBlue.MobileApp.Controls
{
public class SampleControl : SKCanvasView
{
public SampleControl()
{
EnableTouchEvents = true;
}
protected override void OnTouch(SKTouchEventArgs e)
{
System.Diagnostics.Debug.WriteLine($"SampleControl: {e.ActionType}");
}
}
}

输出

[ViewRootImpl] ViewRoot's Touch Event : ACTION_DOWN
[0:] SampleControl: Pressed
[ViewRootImpl] ViewRoot's Touch Event : ACTION_UP
[ViewRootImpl] ViewRoot's Touch Event : ACTION_DOWN
[0:] SampleControl: Pressed
[ViewRootImpl] ViewRoot's Touch Event : ACTION_UP
[ViewRootImpl] ViewRoot's Touch Event : ACTION_DOWN
[0:] SampleControl: Pressed
[ViewRootImpl] ViewRoot's Touch Event : ACTION_UP

视图中使用的控件

<controls:SampleControl 
Grid.Row="1"
HorizontalOptions="Center"
HeightRequest="60"
WidthRequest="120"
BackgroundColor="Aqua"
/>

细节是魔鬼,必须在事件处理程序中标记为已处理。一旦你做到了,神奇的事情就会发生,应用程序就会正确地处理剩下的动作类型。事件处理程序的正确版本如下。

protected override void OnTouch(SKTouchEventArgs e)
{
System.Diagnostics.Debug.WriteLine($"SampleControl: {e.ActionType}, mouse: {e.MouseButton}");
e.Handled = true;
}

最新更新