2

在 iOS 世界中,有一个概念touchUpInside,触摸在视图中开始,用户在视图范围内抬起手指。

我在android中看到touchvs click(事件监听器),我想知道它们之间的区别。

4

3 回答 3

3

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

DOWN:用户触摸项目

MOVE:用户在触摸项目后围绕它移动

UP:用户停止触摸项目

CANCEL:用户移开项目,但仍在触摸屏幕。

在 Android 中,click事件是触摸事件的组合。在click它的两个DOWNUP行动的情况下。还有其他可以在GestureDetector. Fling例如,是、 和的组合DOWN,表示用户非常快速地滑动手指。MOVEUP

编辑:

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

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

当父级从子级的方法View接收时,它将不再向该子级发送触摸事件。这意味着当您查看返回时,您的视图实际上是:falseonTouchEvent()falseonTouchEvent()

I am done processing touch events and all of my children are done as well.

90% 的情况下,onTouchEvent()您会return super.onTouchEvent()返回View.

因此,让我们看一下您的点击示例。这是一种方法,您在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 并且单击将被取消。

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

于 2012-12-27T15:48:21.750 回答
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

于 2012-12-27T15:46:47.743 回答
0

参考PH7的反应

哪个更好用?

这真的取决于你的要求。 onTouch给你运动事件。因此,您可以做很多花哨的事情,因为它可以帮助您分离运动状态。仅举几个

  • ACTION_UP
  • ACTION_DOWN
  • ACTION_MOVE

这些是我们通常执行的常见操作,以获得期望的结果,例如在屏幕上拖动视图。

另一方面,onClick除了用户交互的视图之外,并没有给你太多。onClick是一个完整的事件,包括聚焦、按下和释放。因此,您几乎无法控制它。一方面是实现起来非常简单。

我们需要同时实施吗?

除非您想惹恼您的用户,否则没有必要。如果您只想要简单的点击事件,请选择onClick. 如果您想要的不仅仅是点击,请选择onTouch. 两者都做会使过程复杂化。

从用户的角度来看,如果你onTouch仔细实现看起来像onClick.

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

于 2012-12-27T15:47:34.320 回答