如何在Xamarin.Android上处理三次(或配置的数字)敲击手势

本文关键字:配置 数字 三次 Xamarin Android 处理 | 更新日期: 2023-09-27 18:25:35

我使用GestureDetector.SimpleOnGestureListener类处理应用程序上的一些简单手势。它的工作非常完美。

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

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

如何在Xamarin.Android上处理三次(或配置的数字)敲击手势

            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
                }
            }

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

使用该代码,我不相信这是否是一种好方法,但它确实有效。看看吧。

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;
                }
            }
        };

你可以随心所欲地更改毫秒周期。