मैं अपने ऐप पर कुछ सरल इशारों को संभालने के लिए GestureDetector.SimpleOnGestureListener वर्ग का उपयोग कर रहा हूं। और यह पूरी तरह से काम करता है।

लेकिन अब मुझे कई टैप जेस्चर को संभालने की समस्या का सामना करना पड़ रहा है। मैं बस NumberOfTaps को कॉन्फ़िगर करना चाहता हूं और उचित हावभाव को संभालना चाहता हूं।

लेकिन एंड्रॉइड या Xamarin.Android प्रलेखन पर इसे लागू करने के लिए कोई विवरण या नोट नहीं मिल सकता है।

3
Andrii Tsok 4 पद 2015, 15:15

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

समय सीमा और क्लिक की संख्या कॉन्फ़िगर करने योग्य है।

5
wishmaster 5 पद 2015, 03:26

उस कोड का उपयोग करें, मुझे विश्वास नहीं है कि यह अच्छा तरीका है लेकिन यह काम करता है। इसकी जांच - पड़ताल करें।

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

आप मिलीसेकंड अवधि को बदल सकते हैं कि आप कैसे चाहते हैं।

2
Shalva Avanashvili 4 पद 2015, 15:01