Android View的onTouch和onClick和onLongClick事件

Android系统有自己的事件处理逻辑,而应用开发大部分是在系统逻辑中添加Application逻辑。本文简要说明onTouch,onClick,onLongClick事件关系。

先看这三个事件的处理函数:

  1. public boolean onTouch(View v, MotionEvent event);
  2. public boolean onLongClick(View v);
  3. public void onClick(View v);

看到三个函数的返回值,只有onClick是void,而onTouch和onLongClick是boolean,原因是系统对这些事件的处理是有条件,必须满足条件才会触发相应的事件处理函数。

如果在onTouch和onLongClick都返回false并且长按View时,可以看到三个事件处理函数都会被调用,而且顺序有一定关系。代码如下:

	@Override
	public boolean onTouch(View v, MotionEvent event) {
		Toast.makeText(this, "TOUCH", Toast.LENGTH_SHORT).show();
		return false;

	}

	@Override
	public void onClick(View v) {
		Toast.makeText(this, "CLICK", Toast.LENGTH_SHORT).show();
	}

	@Override
	public boolean onLongClick(View v) {
		Toast.makeText(this, "LONG CLICK", Toast.LENGTH_SHORT).show();
		return false;
	}

事件在事件链中进行传递,如果一级没有处理,将向下一级传递,直到传遍整个事件链。

onTouch如果返回true,则表明对该事件做了处理,不会继续传递该事件在事件链中;onLongClick如果返回true,则表名对该事件做了处理,不会继续传递该事件在事件链中。

为了避免希望被响应的事件没有得到响应,需要对某些事件处理函数中控制事件是否继续传递。具体做法根据不同要求而有差别,在此不做说明了。

扫描二维码关注公众号,回复: 724701 查看本文章

猜你喜欢

转载自wangleyiang.iteye.com/blog/1772148