gpt4 book ai didi

c# - 在 .NET MAUI 中实现 TouchTracking

转载 作者:行者123 更新时间:2023-12-05 03:17:44 24 4
gpt4 key购买 nike

我一直致力于将我们的应用程序从 Xamarin.Forms 迁移到 .NET MAUI。我们的应用程序几乎没有绘图功能,用户可以用手指进行绘图。我们在 Xamarin.Forms 中使用了 TouchTracking nuget 包,但它与 .NET MAUI 不兼容。

以下是我们经常使用的 TouchTracking 包中可用的一些 API:

绘图页面.xaml

<Grid BackgroundColor="White">
<skia:SKCanvasView x:Name="canvasView" PaintSurface="PaintingCanvasEnvent" />

<Grid.Effects>
<tt1:TouchEffect Capture="True" TouchAction="OnTouchEffectAction"/>
</Grid.Effects>
</Grid>

绘图页面.cs

void OnTouchEffectAction(object sender, TouchActionEventArgs args)
{
SKPoint current = args.Location;

switch (args.Type)
{
case TouchActionType.Pressed:
//codes here ...
break;

case TouchActionType.Moved:
//codes here
break;

case TouchActionType.Released:
//codes here
break;

case TouchActionType.Cancelled:
//codes here
break;
}
}

在 Xamarin.Forms 中,TouchTracking 包允许我们检测触摸事件,我们可以获得所有触摸 ID(因为 TouchTracking 可以检测多个手指)坐标。

那么如何实现 TouchTracking nuget 包或某种可以实现上述要求的代码?

最佳答案

您可能需要的所有元素都在那里,您可能需要的大部分代码只需要将命名空间从 XF 更改为 MAUI

所以基本上 TouchEvent 来自这里:https://github.com/OndrejKunc/SkiaScene/tree/master/source/TouchTracking/TouchTracking

namespace TouchTracking.Forms
{
public class TouchEffect : RoutingEffect
{
public event TouchActionEventHandler TouchAction;

public TouchEffect() : base("TouchTracking.TouchEffect")
{
}

public bool Capture { set; get; }

public void OnTouchAction(object element, TouchActionEventArgs args)
{
TouchAction?.Invoke(element, args);
}
}
}

然后在您的原生平台中:

[assembly: ResolutionGroupName("TouchTracking")]
[assembly: ExportEffect(typeof(TouchTracking.Forms.Droid.TouchEffect), "TouchEffect")]
namespace TouchTracking.Forms.Droid
{
public class TouchEffect : PlatformEffect
{
private TouchHandler _touchHandler;
private Android.Views.View _view;
private TouchTracking.Forms.TouchEffect _touchEffect;

protected override void OnAttached()
{
_view = Control == null ? Container : Control;

// Get access to the TouchEffect class in the PCL
_touchEffect =
(TouchTracking.Forms.TouchEffect)Element.Effects.FirstOrDefault(e => e is TouchTracking.Forms.TouchEffect);

if (_touchEffect == null)
{
return;
}

_touchHandler = new TouchHandler();
_touchHandler.TouchAction += TouchHandlerOnTouch;
_touchHandler.Capture = _touchEffect.Capture;
_touchHandler.RegisterEvents(_view);

}

private void TouchHandlerOnTouch(object sender, TouchActionEventArgs args)
{
_touchEffect.OnTouchAction(sender, args);
}

protected override void OnDetached()
{
if (_touchHandler == null)
{
return;
}
_touchHandler.TouchAction -= TouchHandlerOnTouch;
_touchHandler.UnregisterEvents(_view);
}
}
}

完整的源代码在这里:https://github.com/OndrejKunc/SkiaScene/tree/master/source/TouchTracking

希望对您有所帮助,

好运1

关于c# - 在 .NET MAUI 中实现 TouchTracking,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73994251/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com