如何在Xamarin.Android上处理三次(或配置的数字)敲击手势
本文关键字:配置 数字 三次 Xamarin Android 处理 | 更新日期: 2023-09-27 18:25:35
我使用GestureDetector.SimpleOnGestureListener
类处理应用程序上的一些简单手势。它的工作非常完美。
但现在我面临着一个处理多次敲击手势的问题。我只想配置NumbersOfTaps并处理适当的手势。
但找不到任何细节或说明如何在Andoid或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;
}
}
};
你可以随心所欲地更改毫秒周期。