【问题标题】:Touch event cancels Tap Gesture Recognizer in xamarin触摸事件取消 xamarin 中的点击手势识别器
【发布时间】:2019-11-29 19:21:30
【问题描述】:

我正在使用 SkiaSharp 库在画布上绘图。 当我双击时,我需要将点击识别器设置为特定功能。 和画布的触摸事件做另一个功能。 每一个都可以单独使用,但是当我同时使用它们时,Touch 事件会取消 Tap Recognizer。 有什么方法可以同时使用它们吗?

<skia:SKCanvasView x:Name="canvasView"
                   PaintSurface="canvasView_paintSurface"
                   VerticalOptions="FillAndExpand"
                   EnableTouchEvents="true"
                   Touch="OnTouch">
                   <skia:SKCanvasView.GestureRecognizers >
            <TapGestureRecognizer NumberOfTapsRequired="2" Tapped="OnTapped" >
            </TapGestureRecognizer>

    </skia:SKCanvasView.GestureRecognizers>
                   </skia:SKCanvasView>




private void OnTapped(object sender, EventArgs e)
    {
        DisplayAlert("hello", "OnTapped", "Ok", "Cancel");

    }


private async void OnTouch(object sender, SKTouchEventArgs e)
    { 
         DisplayAlert("hello", "OnTouch", "Ok", "Cancel");
    }

【问题讨论】:

    标签: xamarin canvas touch-event gesture-recognition skiasharp


    【解决方案1】:

    解决此问题的一种方法是创建两个点击手势识别器和一个计时器来检查点击的连续性。这样你就知道是触摸还是双击了

    private bool tapHandled;
    public XYZPage() : base()
    {
        var tgr = new TapGestureRecognizer();
        tgr.NumberOfTapsRequired = 1;
        tgr.Tapped += tapped;
        GestureRecognizers.Add(tgr);
    
        var ttgr = new TapGestureRecognizer();
        ttgr.NumberOfTapsRequired = 2;
        ttgr.Tapped += doubletapped;
        GestureRecognizers.Add(ttgr);
    }
    private void tapped(object sender, EventArgs e)
    {
        tapHandled = false;
        Xamarin.Forms.Device.StartTimer(new TimeSpan(0, 0, 0, 0, 300), taptimer);
    }
    private void doubletapped(object sender, EventArgs e)
    {
        tapHandled = true;
        // do double tap work here
        DisplayAlert("hello", "OnDoubleTapped", "Ok", "Cancel");
    }
    private bool taptimer()
    {
        if (!tapHandled)
        {
            tapHandled = true;
            // do Touch stuff here
            DisplayAlert("hello", "OnTouch", "Ok", "Cancel");
        }
        return false;
    } 
    

    【讨论】:

    • 非常感谢,我会试试的
    猜你喜欢
    • 2018-08-19
    • 1970-01-01
    • 2018-05-07
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    相关资源
    最近更新 更多