[关闭]
@DevWiki 2015-11-07T14:25:03.000000Z 字数 1580 阅读 1459

View的onClickListener,onLongClickListener,onTouchListener的研究

Android


更多内容详见:DevWiki's Blog

概述

我们都知道一个View有以下三个事件监听方法:

  1. setOnClickListener();
  2. setOnLongClickListener();
  3. setOnTouchListener();

每一个方法代表着用户不同的操作,分别为:短按,长按和触摸操作.

短按事件
通常一个View设置短按事件监听的代码如下:

  1. view.setOnClickListener(new OnClickListener() {
  2. @Override
  3. public void onClick(View v) {
  4. //do something
  5. }
  6. });

长按事件
通常一个View设置长按事件监听的代码如下:

  1. ttttButton.setOnLongClickListener(new OnLongClickListener() {
  2. @Override
  3. public boolean onLongClick(View v) {
  4. //do something
  5. return true;
  6. }
  7. });

这里有一个返回值:

true if the callback consumed the long click, false otherwise.

意思是说:如果时间被消费了返回true,否则返回false.

触摸事件
通常一个View设置触摸事件监听的代码如下:

  1. ttttButton.setOnTouchListener(new OnTouchListener() {
  2. @Override
  3. public boolean onTouch(View v, MotionEvent event) {
  4. int action = event.getAction();
  5. if (action == MotionEvent.ACTION_DOWN) {
  6. //do something
  7. return true;
  8. }
  9. if (action == MotionEvent.ACTION_MOVE) {
  10. //do something
  11. return true;
  12. }
  13. if (action == MotionEvent.ACTION_UP) {
  14. //do something
  15. return true;
  16. }
  17. return false;
  18. }
  19. });

这里每一个动作都有一个返回值,返回值会影响触摸事件.一个View如果只设置了onTouchListener事件监听.
只有Down返回值为true时,Move和Up动作才能监听到.

如果给一个View同时设置以上三个方法,会出现怎样的结果呢?


测试

1.测试界面

先附上测试界面的效果图,如下:

测试结果

最终的测试结果列表如下:

序号 Click LongClick Down Move Up 短按 长按 备注
1 true true true true down-move-up down-move->up
2 true false true true down-move-up-longClick down-move-longClick-move-up 按钮不抬起
3 true true true false down-move-up down-move-up
4 true false true false down-move-up-click down-move-longClick-move-up
5 false true true true down-move-up down-move-up
6 false false true true down-move-up-longClick down-move-longClick-move-up 按钮不抬起
7 false true true false down-move-up down-move-up
8 false false true false down-move-up-click down-move-longClick-move-up-click
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注