如何在一个类似按钮的android开发者选项上检测一行中的多次点击
我想实现一个类似于android设置应用程序的开发者选项。我的意思是,当一个用户连续7次点击一个按钮时,每次点击之间都会出现一个小的延迟,这时会出现一个弹出窗口,要求他在应用程序中启用一个隐藏功能如何在一个类似按钮的android开发者选项上检测一行中的多次点击,android,gesture,Android,Gesture,我想实现一个类似于android设置应用程序的开发者选项。我的意思是,当一个用户连续7次点击一个按钮时,每次点击之间都会出现一个小的延迟,这时会出现一个弹出窗口,要求他在应用程序中启用一个隐藏功能 如何实现这种行为?我基于看门狗概念开发了它。如果TimerWatchDog的实例未在指定时间内刷新,则该实例将执行该作业ContinuousClicksHandler使用TimerWatchDog的实例以及计算点击次数 用法: 连续单击Shandler.kt /** * @author aminog
如何实现这种行为?我基于看门狗概念开发了它。如果
TimerWatchDog
的实例未在指定时间内刷新,则该实例将执行该作业ContinuousClicksHandler
使用TimerWatchDog
的实例以及计算点击次数
用法:
连续单击Shandler.kt
/**
* @author aminography
*/
class ContinuousClicksHandler(
private val clicksCount: Int,
maxInterval: Long
) {
private var callback: ContinuousClicksCallback? = null
private val timerWatchDog = TimerWatchDog(maxInterval)
private var currentClicks = 0
fun click(): Int {
if (++currentClicks == clicksCount) {
timerWatchDog.cancel()
currentClicks = 0
callback?.onContinuousClicksSuccessful()
} else {
timerWatchDog.refresh {
currentClicks = 0
callback?.onContinuousClicksFailed()
}
}
return currentClicks
}
fun registerCallback(callback: ContinuousClicksCallback) {
this.callback = callback
}
interface ContinuousClicksCallback {
fun onContinuousClicksSuccessful()
fun onContinuousClicksFailed()
}
}
import java.util.*
/**
* @author aminography
*/
class TimerWatchDog(private val timeout: Long) {
private var timer: Timer? = null
fun refresh(job: () -> Unit) {
timer?.cancel()
timer = Timer()
timer?.schedule(object : TimerTask() {
override fun run() = job.invoke()
}, timeout)
}
fun cancel() = timer?.cancel()
}
timerwatchlog.kt
/**
* @author aminography
*/
class ContinuousClicksHandler(
private val clicksCount: Int,
maxInterval: Long
) {
private var callback: ContinuousClicksCallback? = null
private val timerWatchDog = TimerWatchDog(maxInterval)
private var currentClicks = 0
fun click(): Int {
if (++currentClicks == clicksCount) {
timerWatchDog.cancel()
currentClicks = 0
callback?.onContinuousClicksSuccessful()
} else {
timerWatchDog.refresh {
currentClicks = 0
callback?.onContinuousClicksFailed()
}
}
return currentClicks
}
fun registerCallback(callback: ContinuousClicksCallback) {
this.callback = callback
}
interface ContinuousClicksCallback {
fun onContinuousClicksSuccessful()
fun onContinuousClicksFailed()
}
}
import java.util.*
/**
* @author aminography
*/
class TimerWatchDog(private val timeout: Long) {
private var timer: Timer? = null
fun refresh(job: () -> Unit) {
timer?.cancel()
timer = Timer()
timer?.schedule(object : TimerTask() {
override fun run() = job.invoke()
}, timeout)
}
fun cancel() = timer?.cancel()
}
如果要检查时间,请在每次单击时增加一个计数器:),同时保存一个时间变量并与之进行比较,然后在每次单击时更新时间变量。如果时间比预定义的时间间隔长,只需从1开始重新计数。我想可能有一个系统已经实现了的东西,比如双击或长点击:)可能有,但有时编写它似乎更快:)@kirotab是一个很好的解决方案,但是,当单击按钮时,必须添加计时器,因此,当单击距离上一个按钮太远时,它将重新启动为0,而不是继续计数。