【问题标题】:How to set timer on click?如何在点击时设置计时器?
【发布时间】:2019-11-28 12:02:07
【问题描述】:

想设置1分钟的定时器,如果没有点击,那就调用我的方法viewContract.lockScreen()

这是我的代码:

override fun dispatchTouchEvent(ev: MotionEvent?): Boolean {
    viewContract.lockScreen()
    return super.dispatchTouchEvent(ev)
}

【问题讨论】:

  • 只是点击?还是卷轴?
  • @NaitikSoni 点击。

标签: android kotlin motionevent


【解决方案1】:

我会在Handler 上做一个postDelayed(...),比如:

val handler = Handler(Looper.getMainLooper())
val timerDuration = TimeUnit.MINUTES.toMillis(1)
val timerAction = Runnable { /* call your method here... */ }

fun startTimer() =  handler.postDelayed(timerAction, timerDuration)
fun cancelTimer() = handler.removeCallbacks(timerAction)

编辑:

这个问题有点不清楚,因为你声明你想在没有交互的情况下在 1 分钟过去后执行viewContract.lockScreen(),但是你在dispatchTouchEvent 中调用相同的方法,这是发生触摸的时候。但在我看来,你应该这样称呼它:

val handler = Handler(Looper.getMainLooper())
val timerDuration = TimeUnit.MINUTES.toMillis(1)
val timerAction = Runnable { viewContract.lockScreen() }

override fun dispatchTouchEvent(ev: MotionEvent?): Boolean {
    cancelTimer()
    return super.dispatchTouchEvent(ev)
}

fun startTimer() =  handler.postDelayed(timerAction, timerDuration)
fun cancelTimer() = handler.removeCallbacks(timerAction)

还不清楚计时器应该何时开始,但无论如何,只要在应该发生的时候致电startTimer()

【讨论】:

  • 我认为我可以在我的dispatchTouchEvent 上替换 onViewClicked?因为在这里我可以对点击做出反应
  • 将答案更新为更简单的start/cancel 示例,只需在您想要启动和取消计时器的地方调用startTimer()/cancelTimer() :)
  • 这个想法是:我的方法dispatchTouchEvent() 响应应用程序中的所有点击。如果用户停止点击并且一分钟过去了,我必须打电话给viewContract.lockScreen()
  • 另外如果我理解正确的话,最好在方法dispatchTouchEvent中调用startTimer。但是每次点击都调用这个方法有点不好,你怎么看?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-08
  • 2012-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-02
  • 2021-09-22
相关资源
最近更新 更多