为什么 SkiaSharp Touch SKTouchAction.Moved 事件不起作用?
Why does SkiaSharp Touch SKTouchAction.Moved event not work?
总结
从未使用 SKTouchAction.Moved
的 ActionType 引发 Touch 事件,但引发了 SKTouchAction.Pressed
。为什么 .Moved
事件永远不会引发?
详情
我正在尝试在 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
永远不会被击中,但我希望当我在控件上滑动手指时它会被击中。
我尝试过的
- Clean/rebuild 以确保我的代码确实被部署了
- 从 SkiaSharp 1.60.3 升级到 1.68.0
- 我能想到的所有疯狂的手指动作
- 通读 https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/graphics/skiasharp/transforms/touch ,但它使用 XAML 分配效果(我不熟悉)并且我在任何地方都看不到 TouchEffect class我的代码将它添加到包含我的
SkiaCanvasView
的父网格。
在 SkiaSharp 的 Github 上找到 similar issue。
尝试通过将事件参数中的 Handled 属性 设置为 true 来告诉 OS 您想要 "continue receiving touch events"。
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;
}
总结
从未使用 SKTouchAction.Moved
的 ActionType 引发 Touch 事件,但引发了 SKTouchAction.Pressed
。为什么 .Moved
事件永远不会引发?
详情
我正在尝试在 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
永远不会被击中,但我希望当我在控件上滑动手指时它会被击中。
我尝试过的
- Clean/rebuild 以确保我的代码确实被部署了
- 从 SkiaSharp 1.60.3 升级到 1.68.0
- 我能想到的所有疯狂的手指动作
- 通读 https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/graphics/skiasharp/transforms/touch ,但它使用 XAML 分配效果(我不熟悉)并且我在任何地方都看不到 TouchEffect class我的代码将它添加到包含我的
SkiaCanvasView
的父网格。
在 SkiaSharp 的 Github 上找到 similar issue。
尝试通过将事件参数中的 Handled 属性 设置为 true 来告诉 OS 您想要 "continue receiving touch events"。
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;
}