【发布时间】:2020-07-05 11:41:27
【问题描述】:
我有一个按钮来触发 MainActivity 中的某些操作,我想绘制动画如下:当用户按住按钮 (ACTION_DOWN) 时它会缩小,当按钮释放时 (ACTION_UP 或 ACTION_CANCEL) 它会放大并返回恢复到正常状态。
当用户按住按钮一段时间时,这很有效,但对于正常点击,即使 ACTION_DOWN 调用,ACTION_UP 也不会被调用。
我在文档中搜索并检查了 stackoverflow 上的几乎所有答案,但没有发现任何有用的信息。
documentation 是这样说的:“虽然框架试图将一致的运动事件流传递给视图,但它不能保证这一点。某些事件可能会在传递之前通过在应用程序中包含视图而被删除或修改,从而使事件流不一致。视图应始终准备好处理 ACTION_CANCEL,并应容忍异常情况,例如在没有先收到前一个手势的 ACTION_UP 的情况下接收到新的 ACTION_DOWN。"
这是我的代码:
button.setOnTouchListener { view, event ->
when(event?.action){
//behaves as expected
MotionEvent.ACTION_DOWN -> {
scaleDown(view)
}
//the problem here: ACTION_UP gets called only when user holds the button for some time
//and not for a quick/ normal click.
MotionEvent.ACTION_UP -> {
scaleUp(view)
doSomething()
}
//behaves as expected
MotionEvent.ACTION_CANCEL -> {
scaleUp(view)
}
}
true
}
我有两个问题,第一:为什么 ACTION_UP 永远不会被调用来进行快速/正常点击?
第二:如果我想以两种不同的方式做出反应,如何区分正常点击和用户按住按钮一段时间?
【问题讨论】:
标签: android android-studio touch-event ontouchlistener