我使用GestureDetector.SimpleOnGestureListener
类来处理我的应用上的一些简单手势。而且它完美无缺。
但是现在我遇到了处理多个轻击手势的问题。 我只想配置NumbersOfTaps并处理适当的手势。
但无法找到任何细节或说明如何在Andoid或Xamarin.Android文档中实现它。
答案 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。