执行顺序
废话不多说,看别人博客也只是别人说的,自己实践了才知道!
public class MainActivity extends ActionBarActivity implements OnTouchListener,
OnClickListener, OnLongClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = (Button) findViewById(R.id.test);
btn.setOnTouchListener(this);
btn.setOnClickListener(this);
btn.setOnLongClickListener(this);
}
@Override
public boolean onLongClick(View arg0) {
System.out.println("onLongClick");
return true;
}
@Override
public void onClick(View arg0) {
System.out.println("onClick");
}
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
if (arg1.getAction() == MotionEvent.ACTION_DOWN) {
System.out.println("onTouch ACTION_DOWN");
return true;
} else if (arg1.getAction() == MotionEvent.ACTION_UP) {
System.out.println("ACTION_UP");
return false;
}
System.out.println("onTouch" + arg1.getAction());
return false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
System.out.println("onTouchEvent");
return super.onTouchEvent(event);
}
}
结论
经过实践,得到结论
- 结论onLongClick在DOWN事件之后触发,onClick在UP事件触发
onLongClick,onTouch有返回值,返回true代表消费用户的UI事件,onClick没有返回值
1.onTouch 返回true:
- onTouch0
- onTouch1
事件在onTouch里面被消费了,就不会向下传递,所以在onLongClick,onClick都不会收到响应
2.onTouch,onLongClick都返回false:
短按- onTouch0
- onTouch1
onClick
长按
*onTouch0
*onLongClick
*onTouch1
*onClickonTouch返回false,事件向下传递,onLongClick返回false不消费 ,短按没有可说的,长按首先会走LongClick,之后向下传递走onCLick
3.onTouch返回false,onLongClick返回true:
- onTouch返回false,可以向下传递
- 短按
- onTouch0
- onTouch1
onClick
短按的话没有走到LongCLick,事件没有被消费,可以走到onClick长按
- onTouch0
- onLongClick
onTouch1
长按事件被消费了,就不会向下传递了4.onTouch的Down事件返回false,up事件返回true
貌似短按长按都会走LongClick- onTouch ACTION_DOWN
- onTouch ACTION_UP
- onLongClick
UP事件返回true,事件就不会传给onClick
5.onTouch的Down事件返回true,up事件返回false
- onTouch ACTION_DOWN
- onTouch ACTION_UP
- DOWN事件之后返回true,事件不会向下传递!
-
这样就比较明了了!