为了账号安全,请及时绑定邮箱和手机立即绑定

MR.Gestures - 自定义视图

MR.Gestures - 自定义视图

C#
慕仙森 2022-01-15 19:21:03
我有一个绘制一些图形的 SKCanvasView,现在需要获取点击位置。在阅读了几篇文章后,我决定通过 MR.Gestures 来实现这一点。因为包内没有 SKCanvasView 的标准实现,所以我需要自己实现它。我的猜测是继承自IGestureAwareControlpublic class AudioWaveView : SKCanvasView, IGestureAwareControl这个需要实现一堆事件和命令:    public GestureHandler GestureHandler { get; }    public ICommand DownCommand { get; set; }    public object DownCommandParameter { get; set; }    public ICommand UpCommand { get; set; }    public object UpCommandParameter { get; set; }    public ICommand TappingCommand { get; set; }    public object TappingCommandParameter { get; set; }    public ICommand TappedCommand { get; set; }    public object TappedCommandParameter { get; set; }    public ICommand DoubleTappedCommand { get; set; }    public object DoubleTappedCommandParameter { get; set; }    public ICommand LongPressingCommand { get; set; }    public object LongPressingCommandParameter { get; set; }    public ICommand LongPressedCommand { get; set; }    public object LongPressedCommandParameter { get; set; }    public ICommand PinchingCommand { get; set; }    public object PinchingCommandParameter { get; set; }    public ICommand PinchedCommand { get; set; }    public object PinchedCommandParameter { get; set; }    public ICommand PanningCommand { get; set; }    public object PanningCommandParameter { get; set; }    public ICommand PannedCommand { get; set; }    public object PannedCommandParameter { get; set; }    public ICommand SwipedCommand { get; set; }    public object SwipedCommandParameter { get; set; }    public ICommand RotatingCommand { get; set; }    public object RotatingCommandParameter { get; set; }    public ICommand RotatedCommand { get; set; }我不确定这是否是要走的路,但它看起来是一个很好的起点,但现在我被卡住了,不知道如何走得更远。有没有人做过类似的事情或知道解决方案?
查看完整描述

1 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

请查看Microsoft 关于 SkiaSharp 的触控操作文章。它使用一个 Effect 来支持触摸操作,更多关于效果的细节在这里:Invoking Events from Effects


基本上,您需要在添加 CanvasView 的容器中添加一个 TouchEffect(或者甚至将效果添加到您的 CanvasView,上面链接的文章中有一个这样的示例):


<Grid BackgroundColor="White" Grid.Row="1">

    <skia:SKCanvasView x:Name="canvasView" PaintSurface="OnCanvasViewPaintSurface" />

    <Grid.Effects>

        <tt:TouchEffect Capture="True" TouchAction="OnTouchEffectAction" />

    </Grid.Effects>

</Grid>

然后为 TouchAction 事件添加一个处理程序,如下所示。您需要先将触摸点转换为像素,然后检查是否


void OnTouchEffectAction(object sender, TouchActionEventArgs args)

{

        if (args.Type != TouchActionType.Pressed)

        {

            return;

        }


        var pointLocation = args.Location;

        var point =

            new SKPoint((float)(canvasView.CanvasSize.Width * pointLocation.X / canvasView.Width),

                        (float)(canvasView.CanvasSize.Height * pointLocation.Y / canvasView.Height));


        // TODO: Handle your touch here

}


查看完整回答
反对 回复 2022-01-15
  • 1 回答
  • 0 关注
  • 152 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信