Summary
ActionType 为 的情况下永远不会引发 Touch 事件SKTouchAction.Moved
, but SKTouchAction.Pressed
被提出。为什么.Moved
事件永远不会被引发?
Detail
我正在尝试在 SkiaSharp 中创建滑块。该控件需要更新thumb(可移动的小圆圈)当用户触摸滑块或拖动时。这是托管在 Xamarin Forms 应用程序中,我创建了一个SKCanvasView
绘制滑块并响应触摸事件。
我已经成功响应触摸事件,所以我知道SKCanvasView
正在接收一些 UI 事件,但是SKTouchAction.Moved
永远不会被提出。
示例代码
private SKCanvasView CreateSliderControl()
{
var control = new SKCanvasView();
control.PaintSurface += HandlePaintHeightControl;
control.EnableTouchEvents = true;
control.Touch += (sender, args) =>
{
var pt = args.Location;
switch (args.ActionType)
{
case SKTouchAction.Pressed:
// 1. This code gets hit whenever I touch the canvas
control.InvalidateSurface();
break;
case SKTouchAction.Moved:
// 2. This code never gets hit, even if I push, touch, slide, etc
control.InvalidateSurface();
break;
}
};
control.InputTransparent = false;
return control;
}
如上图#1
被击中(我可以在那里放置一个断点,并且我的控制面将失效)。#2
永远不会被击中,但我希望当我在控件上滑动手指时它会被击中。
我尝试过的
- 清理/重建以确保我的代码确实被部署
- 从 SkiaSharp 1.60.3 升级到 1.68.0
- 我能想出的所有疯狂的手指动作
- 通读https://learn.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/graphics/skiasharp/transforms/touch,但是它使用 XAML 来分配 Effect(我不熟悉),并且我在代码中的任何位置都看不到可用的 TouchEffect 类来将其添加到包含我的父网格
SkiaCanvasView
.
Found a 类似问题在 SkiaSharp 的 Github 上。
尝试通过将事件参数中的 Handled 属性设置为 true 来告诉操作系统您想要“继续接收触摸事件”。
private SKCanvasView CreateSliderControl()
{
var control = new SKCanvasView();
control.PaintSurface += HandlePaintHeightControl;
control.EnableTouchEvents = true;
control.Touch += (sender, args) =>
{
var pt = args.Location;
switch (args.ActionType)
{
case SKTouchAction.Pressed:
control.InvalidateSurface();
break;
case SKTouchAction.Moved:
control.InvalidateSurface();
break;
}
// Let the OS know that we want to receive more touch events
args.Handled = true;
};
control.InputTransparent = false;
return control;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)