Android系统有自己的事件处理逻辑,而应用开发大部分是在系统逻辑中添加Application逻辑。本文简要说明onTouch,onClick,onLongClick事件关系。
先看这三个事件的处理函数:
- public boolean onTouch(View v, MotionEvent event);
- public boolean onLongClick(View v);
- 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,则表名对该事件做了处理,不会继续传递该事件在事件链中。
为了避免希望被响应的事件没有得到响应,需要对某些事件处理函数中控制事件是否继续传递。具体做法根据不同要求而有差别,在此不做说明了。
相关推荐
此Demo是我进行改进的,既可以通过OnTouch对图片进行放大缩小移动,也可以对图片进行OnClick点击,OnLongClick点击。不会出现冲突。
解决了android悬浮框的onTouch和onClick事件可以同存的问题。
NULL 博文链接:https://johnnycmj.iteye.com/blog/2234305
下面小编就为大家带来一篇详谈Android中onTouch与onClick事件的关系(必看)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Android onTouch事件传递机制
新手学习Android, ontouch事件处理的三种写法,1、接口实现,2、内部类,3、匿名内部类
android click 和onTouch 事件处理机制,极其详细介绍
可直接运行的手势操作onTouch事件的demo
相信不少朋友在刚开始...分不清onTouch(),onTouchEvent()和OnClick()之间的关系和先后顺序,所以觉得有必要搞清onTouch事件传递的原理。经过一段时间的琢磨以及相关博客的介绍,这篇文章就给大家详细的分析介绍下。
使用OnTouch实现一个控件同时设置单击、双击、长按事件监听。
Android onTouch机制源码,重写dispatchTouchEvent和onTouchEvent事件,通过日志观察执行顺序
丰富多彩的Android onTouch事件
Android中丰富多彩的onTouch事件.rar
有一个Button 按钮,要想为该按钮设置onClick事件和OnTouch事件 mTestButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Log.d(TAG, onClick execute); } }...
1、若return false说明没有成功执行onTouch事件,在执行完onTouch里面的代码之后,onTouch事件并没有结束。因此某些组件如Gallery会自动执行它所在view里onTouch方法的代码。若在onTouch方法里面增加你的代码并且...
OnTouch事件的机制,容易出错的地方
用于解决一个界面内同时存在多个不同类型监听冲突的方法,实现类似QQHD版窗口拖动滚动点击效果