Vic*_*aru 3 touch xamarin xamarin.forms skiasharp
触摸事件永远不会与 ActionType 一起引发SKTouchAction.Moved,但SKTouchAction.Pressed会引发。为什么.Moved事件永远不会被引发?
我正在尝试在 SkiaSharp 中创建一个滑块。当用户触摸滑块或拖动时,此控件将需要更新拇指(可移动的小圆圈)。这是托管在 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;
}
Run Code Online (Sandbox Code Playgroud)
如上所示#1被击中(我可以在那里放置一个断点,并且我的控制面无效)。#2永远不会被击中,但我希望当我将手指滑过控件时它会被击中。
SkiaCanvasView.小智 8
在 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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1364 次 |
| 最近记录: |