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

时间:2015-12-04 12:15:30

标签: c# android xamarin xamarin.android

我使用GestureDetector.SimpleOnGestureListener类来处理我的应用上的一些简单手势。而且它完美无缺。

但是现在我遇到了处理多个轻击手势的问题。 我只想配置NumbersOfTaps并处理适当的手势。

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

使用该代码,我不相信它是好的方法,但它的工作原理。看看吧。

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。