如何处理 Xamarin.Android 上的三重(或配置数量)点击手势?
How to handle triple (or configured numbers) of tap gesture on Xamarin.Android?
我正在使用 GestureDetector.SimpleOnGestureListener
class 在我的应用程序上处理一些简单的手势。而且效果很好。
但现在我面临着处理多次点击手势的问题。
我只想配置 NumbersOfTaps 并处理适当的手势。
但找不到任何细节或注释如何在 Andoid 或 Xamarin.Android 文档上实现它。
使用该代码,我不认为这是个好方法,但它确实有效。看看吧。
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。
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
}
}
时间限制和点击次数可配置。
我正在使用 GestureDetector.SimpleOnGestureListener
class 在我的应用程序上处理一些简单的手势。而且效果很好。
但现在我面临着处理多次点击手势的问题。 我只想配置 NumbersOfTaps 并处理适当的手势。
但找不到任何细节或注释如何在 Andoid 或 Xamarin.Android 文档上实现它。
使用该代码,我不认为这是个好方法,但它确实有效。看看吧。
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。
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
}
}
时间限制和点击次数可配置。