在iOS世界中,有touchUpInside
的概念,触摸在视图中开始,用户在视图范围内抬起手指。
我在android中看到touch
vs click
(事件监听器),我想知道它们之间的区别。
答案 0 :(得分:3)
触摸事件更基本。有很多种。最常见的是:
DOWN
:用户触摸该项
MOVE
:用户在触摸
UP
:用户停止触摸该项
CANCEL
:用户将项目移开,但仍在触摸屏幕。
在Android中,click
事件是触摸事件的组合。在click
的情况下,DOWN
和UP
行为都是GestureDetector
。还有一些可以在Fling
中找到。 DOWN
例如是MOVE
,UP
和true
的快速动作组合,表示用户真的快速滑动手指。
修改强>
澄清Android如何处理onTouchEvent()中的false
和dispatchTouchEvent()
。
它没有很好的文档,但是在Android中使用Views的方式是,当您触摸View时,它会将触摸事件从父视图发送到所有子视图。然后每个孩子都会将活动发送给孩子。这是在View
方法中完成的。
当父false
从孩子的onTouchEvent()
方法收到false
时,它将不再向该孩子发送触摸事件。这意味着,当您在onTouchEvent()
中查看I am done processing touch events and all of my children are done as well.
时,您的视图真的会说:
onTouchEvent()
90%的时间,在return super.onTouchEvent()
View
,DOWN
会返回 @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,但在UP上返回true。
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
发送触摸事件,因为您已经说完了。
这是另一种方式:
click
它相当粗糙,但基本上就是这将发生的事情。当用户第一次触摸它时,您将收到{{1}},它将返回true。如果用户抬起手指,它将执行{{1}}操作,之后将返回false,因为事件已完成。如果用户移动他的手指或执行任何其他操作,它将返回false并且点击将被清除。
最后一个不是实现点击的最佳方式,但我认为它说明了我想说的内容。在现实生活中,即使是几个像素,移动事件也是非常常见的。
答案 1 :(得分:0)
onClickListener,例如:单击Button,ImageButton的事件。
每当你想要实现Touch功能时,就会使用onTouchListener,例如,如果你想要准确触摸屏幕的坐标,就可以使用。
说明:
onClickListner:单击视图时要调用的回调的接口定义。
onTouchListener:将触摸事件调度到此视图时要调用的回调的接口定义。在将触摸事件提供给视图之前,将调用回调。
详细信息:
onClickListener:http://developer.android.com/reference/android/view/View.OnClickListener.html
onTouchListener:http://developer.android.com/reference/android/view/View.OnTouchListener.html
答案 2 :(得分:0)
请参阅 PH7
的回复哪一个更好用?
这实际上取决于您的要求。
onTouch
为您提供动作事件。因此,你可以做很多奇特的事情,因为它可以帮助你分离运动状态。仅举几例
ACTION_UP
ACTION_DOWN
ACTION_MOVE
这些是我们通常用来获取欲望结果的常见操作,例如在屏幕上拖动视图。
另一方面,onClick
除了视图用户进行交互之外没有给你太多。 onClick
是一个完整的事件,包括聚焦,按压和释放。所以,你几乎无法控制它。一方面是实施起来非常简单。
我们需要同时实施吗?
除非你想弄乱你的用户,否则没有必要。如果您只想要简单的点击事件,请转到onClick
。如果您需要的不仅仅是点击,请转到onTouch
。两者都会使过程复杂化。
从用户的角度来看,如果您仔细实施onTouch
看起来像onClick
,那就不明显了。