如何解决SKCanvasView 事件参数只包含按下的动作类型
My Sample 自定义控件继承自 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;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。