SKCanvasView 事件参数仅包含 Pressed 动作类型
SKCanvasView event args contains only Pressed action type
我的示例自定义控件继承自 SKCanvaView
并覆盖了 OnTouch
方法。它简单地打印到调试流操作类型中,但是,操作类型始终是 Pressed
.
的类型
根据我的理解,我应该得到像 Pressed
、Released
、Moved
、Cancel
这样的操作类型。
为什么我得到 仅 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;
}
我的示例自定义控件继承自 SKCanvaView
并覆盖了 OnTouch
方法。它简单地打印到调试流操作类型中,但是,操作类型始终是 Pressed
.
根据我的理解,我应该得到像 Pressed
、Released
、Moved
、Cancel
这样的操作类型。
为什么我得到 仅 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;
}