在中实现触摸追踪.NET MAUI



我一直在从Xamarin迁移我们的应用程序。表单到。NET MAUI。我们的应用程序几乎没有绘图功能,用户可以用手指进行绘图。我们在Xamarin中使用了TouchTrackingnuget包。表单,但与不兼容。NET MAUI。

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

DrawPage.xaml

<Grid BackgroundColor="White">
<skia:SKCanvasView x:Name="canvasView" PaintSurface="PaintingCanvasEnvent" />
<Grid.Effects>
<tt1:TouchEffect Capture="True" TouchAction="OnTouchEffectAction"/>
</Grid.Effects>
</Grid>

DrawPage.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。表单,TouchTracking包允许我们检测触摸事件,并且我们可以获得带有其坐标的所有触摸ID(因为TouchTracking可以检测多个手指(。

那么,我该如何实现TouchTrackingnuget包或某种可以实现上述要求的代码呢?

您需要的所有元素可能都在其中,您可能需要的大多数代码只需要将名称空间从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

更新

由于我经常使用TouchTracking,我决定自己将其移植到毛伊岛,Checkout:https://github.com/FreakyAli/Maui.FreakyEffects

相关内容

  • 没有找到相关文章

最新更新