如何处理 Xamarin.Android 上的三重(或配置数量)点击手势?

How to handle triple (or configured numbers) of tap gesture on Xamarin.Android?

我正在使用 GestureDetector.SimpleOnGestureListener class 在我的应用程序上处理一些简单的手势。而且效果很好。

但现在我面临着处理多次点击手势的问题。 我只想配置 NumbersOfTaps 并处理适当的手势。

但找不到任何细节或注释如何在 Andoid 或 Xamarin.Android 文档上实现它。

使用该代码,我不认为这是个好方法,但它确实有效。看看吧。

long milliSeconds = 0;
        var tapCount = 0;
        var millisecondsPeriod = 200;
        button.Click += (object sender, EventArgs e) => {
            if (milliSeconds == 0) {
                milliSeconds = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
                tapCount++;
            } else {
                var currMill = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond - milliSeconds;
                if (currMill < millisecondsPeriod) {
                    milliSeconds = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
                    tapCount++;
                    if (tapCount == 3) {
                        Toast.MakeText (this, "triple", ToastLength.Long).Show ();
                    }
                } else {
                    tapCount = 0;
                    milliSeconds = 0;
                }
            }
        };

您可以根据需要更改 millisecondsPeriod。

            DateTime _firstTap;
            int _tapCount = 0;
            const int TAP_COUNT_TRESHOLD = 5; //number of taps
            const int TIME_TRESHOLD 200; //ms time

            protected override void OnResume()
            {
                myButton.Clicked += ButtonTapped;
            }

            protected override void OnPause()
            {
                myButton.Clicked -= ButtonTapped;
            }

            void ButtonTapped(object sender, EventArgs e){

                var time = Math.Round((DateTime.Now - _firstTap).TotalMilliseconds, MidpointRounding.AwayFromZero);

                if (time > TIME_TRESHOLD)
                {
                    _tapCount = 1;
                    _firstTap = DateTime.Now;
                }
                else
                    _tapCount++;

                if (_tapCount == TAP_COUNT_TRESHOLD)
                {
                   //do your logic here
                }
            }

时间限制和点击次数可配置。