在 iOS 世界中,有一个 touchUpInside
的概念,触摸在 View 内启动,用户在 View 范围内抬起手指。
我在 Android 中看到了 touch
与 click
(事件监听器),我想知道它们之间的区别。
最佳答案
触摸事件更为基本。有很多品种。最常见的是:
DOWN
:用户触摸该项目
MOVE
:用户在触摸项目后移动
UP
:用户停止触摸该项目
取消
:用户移开项目,但仍在触摸屏幕。
在 Android 中,click
事件是触摸事件的组合。对于click
,它既是DOWN
又是UP
操作。还有其他可以在 GestureDetector
中找到。例如,Fling
是 DOWN
、MOVE
和 UP
快速 Action 的组合,表示用户滑动手指速度真快。
编辑:
澄清 Android 如何处理 onTouchEvent() 中的 true
和 false
。
它没有很好的记录,但是 View 在 Android 中的工作方式是,当您触摸 View 时,它会将触摸事件从父 View 发送到所有 subview 。然后每个 child 都会将该事件发送给它的 child 。这是在 dispatchTouchEvent()
方法中完成的。
当父级 View
从子级的 onTouchEvent()
方法接收到 false
时,它将不再向该子级发送触摸事件。这意味着当您的 View 在 onTouchEvent()
中返回 false
时,您的 View 实际上是这样说的:
我已经完成了触摸事件的处理,我所有的 child 也都完成了。
90% 的情况下,在 onTouchEvent()
中,您会执行 return super.onTouchEvent()
来返回 中所有子级的触摸值查看
。
那么让我们看一下您的点击示例。这是一种方法,在 DOWN
事件上返回 false,但在 UP 事件上返回 true。
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
return false;
case MotionEvent.ACTION_UP:
return true;
break;
default:
return false;
}
}
在这种情况下,此View
的父级将立即收到 false。之后,它将停止向此 View
发送触摸事件,因为您说过它已经完成。
这是另一种方法:
boolean mPossibleClick = false;
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mPossibleClick = true;
break;
case MotionEvent.ACTION_UP:
if(mPossibleClick) {
// UP event immediately after DOWN. Perform click action
}
default:
mPossibleClick = false;
}
return mPossibleClick;
}
这相当粗糙,但基本上这就是会发生的事情。当用户第一次触摸它时,您将收到DOWN
,它将返回true。如果用户抬起手指,它将执行click
操作,之后将返回 false,因为事件已完成。如果用户移动手指或执行任何其他操作,它将返回 false 并且点击将被清空。
最后一个不是实现点击的最佳方式,但我认为它说明了我想说的内容。在现实生活中,移动事件非常常见,即使只是几个像素。
关于android - android中 `click event`被认为是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14057237/