android中的“点击事件”是什么?

android中的“点击事件”是什么?,android,events,click,touch,Android,Events,Click,Touch,在iOS世界中,有一个概念是touchUpInside,触摸在视图中启动,用户在视图范围内举起手指 我在安卓系统中看到了触摸和点击,我想知道它们之间的区别 每当引发任何视图的单击事件时,都会使用onClickListener,例如:按钮的单击事件、图像按钮 onTouchListener在您想要实现触摸式功能时使用,例如,如果您想要获得触摸屏的坐标 定义: onClickListner:单击视图时调用回调的接口定义 onTouchListener:将触摸事件发送到此视图时要调用的回调的接口定义。

在iOS世界中,有一个概念是
touchUpInside
,触摸在视图中启动,用户在视图范围内举起手指


我在安卓系统中看到了触摸和点击,我想知道它们之间的区别

每当引发任何视图的单击事件时,都会使用onClickListener,例如:按钮的单击事件、图像按钮

onTouchListener在您想要实现触摸式功能时使用,例如,如果您想要获得触摸屏的坐标

定义:

onClickListner:单击视图时调用回调的接口定义

onTouchListener:将触摸事件发送到此视图时要调用的回调的接口定义。在将触摸事件提供给视图之前,将调用回调

详情:

onClickListener:


onTouchListener:

参考PH7的响应

哪一个更好用

这取决于你的要求。
onTouch
提供运动事件。因此,你可以做很多新奇的事情,因为它可以帮助你分离运动状态。仅举几个例子

  • ACTION\u UP
  • ACTION\u DOWN
  • ACTION\u MOVE
这些是我们通常实现以获得所需结果的常见操作,例如在屏幕上拖动视图

另一方面,
onClick
除了提供与用户交互的视图之外,并没有提供太多信息
onClick
是一个完整的事件,包括对焦、按下和释放。所以,你几乎无法控制它。一方面,它的实现非常简单

我们是否需要实现这两个目标

这是没有必要的,除非你想搞乱你的用户。如果您只需要简单的点击事件,请点击
onClick
。如果您想点击更多内容,请点击
onTouch
。两者兼而有之会使过程复杂化

从用户的角度来看,如果小心地将
onTouch
实现为类似于
onClick
,这是不明显的


有关更多详细信息:请参阅和

触摸事件更为基本。有很多种类。最常见的是:

向下
:用户触摸项目

移动
:用户在触摸项目后移动项目

UP
:用户停止触摸项目

取消
:用户移开项目,但仍在触摸屏幕

在Android中,
点击事件是触摸事件的组合。如果是
单击
,则同时执行
向下
向上
操作。还有一些可以在
手势检测器中找到<例如,code>Fling
DOWN
MOVE
UP
的快速组合,表示用户快速滑动手指

编辑:

说明Android如何处理onTouchEvent()中的
true
false

虽然没有很好的文档记录,但Android中视图的工作方式是,当您触摸一个视图时,它会将该触摸事件从父视图发送到所有子视图。然后,每个子级将事件发送给其子级。这是通过
dispatchTouchEvent()
方法完成的

当父视图从子视图的
onTouchEvent()
方法接收到
false
时,它将不再向该子视图发送触摸事件。这意味着,当您的视图在
onTouchEvent()
中返回
false
时,您的视图实际上显示:

我已经完成了触摸事件的处理,我所有的孩子也都完成了。

90%的时间,在
onTouchEvent()
中,您可以执行
返回super.onTouchEvent()
以返回
视图中所有子对象的触摸值

让我们看看你的点击示例。这里有一种方法,在
DOWN
事件中返回false,在向上事件中返回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;
    }
} 
在这种情况下,此
视图的父视图将立即收到false。在此之后,它将停止向此
视图发送触摸事件,因为您说它已完成

还有一种方法:

 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。如果用户抬起手指,它将执行
单击
操作,之后将返回false,因为事件已完成。如果用户移动手指或执行任何其他操作,则返回false,单击将被取消


最后一个不是实现点击的最佳方式,但我认为它说明了我想说的。在现实生活中,移动事件非常常见,即使只有几个像素

因此,如果我想在touchListener中捕获“点击事件”,我应该测试
向下
向上
?如果是,以什么方式?或者测试
up
就足够了?您必须在触摸事件中测试
DOWN
,并返回
true
,因为一旦视图返回
false
它将停止接收触摸事件。当一个视图返回
false
时,它意味着“没有进一步的触摸处理,我可以这样做,不用再问了”。因此,在本例中,您将捕获一个
DOWN
事件,返回true,然后捕获一个
UP
事件。
false
true
与您在onTouch中所说的意思不同。你能详细说明一下吗?onTouch()-返回一个布尔值,指示侦听器是否使用此事件。重要的是,此事件可以有多个后续操作。因此,如果在接收到down action事件时返回false,则表示