摘要
Touch事件永远不会使用SKTouchAction.Moved
ActionType触发,但会触发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
从未被触发,但是我希望当我在控件上滑动手指时它会被触发。
我尝试过的方法
- 清理/重建以确保我的代码实际上被部署了
- 升级SkiaSharp 1.60.3到1.68.0
- 所有我能想到的疯狂的手指动作
- 阅读https://learn.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/graphics/skiasharp/transforms/touch,但是那使用XAML来分配效果(我不熟悉),并且我在代码中没有找到TouchEffect类可用于添加到包含
SkiaCanvasView
的父网格中。