一个view如何同时响应onTouch和onClick事件
在项目中遇到的问题,需要同时给imageVIew设置onTouch和onClick事件 , 在onTouch事件中执行拖动操作,在onClick中执行显示一个对话框,可是两个事件一直有冲突。onTouch事件的返回值是boolean类型的,如果返回true ,那么就把事件拦截,onclick肯定无法响应;返回false,就同时执行onClick方法,要想把OnTouch和onClick事件完全的区
分,这里想到了一个不是很完美但使用完全没有错误的方法,就是在 OnTouch中的MotionEvent.ACTION_DOWN 时,记录下点(X1,Y1),在 MotionEvent.ACTION_UP 时,记录下点(X2,Y2),然后比对 俩点之间的距离,如果小于一个较小数值(比如5),就认为是Click事件,onTouch中返回false,如果距离较大,可以当作onTouch事件去处理,返回true:
示范如下:
@Override public boolean onTouch(View v, MotionEvent event) { int action = event.getAction(); int screenWidth = getResources().getDisplayMetrics().widthPixels; switch (action) { case MotionEvent.ACTION_DOWN: lastX = (int) event.getRawX(); lastY = (int) event.getRawY(); x1 = event.getRawX();//得到相对应屏幕左上角的坐标 y1 = event.getRawY(); break; case MotionEvent.ACTION_MOVE: int dx = (int) event.getRawX() - lastX; int dy = (int) event.getRawY() - lastY; int left = v.getLeft() + dx; int top = v.getTop() + dy; int right = v.getRight() + dx; int bottom = v.getBottom() + dy; if (left < 0) { left = 0; right = left + v.getWidth(); } if (right > screenWidth) { right = screenWidth; left = right - v.getWidth(); } if (top < 0) { top = 0; bottom = top + v.getHeight(); } if (bottom > screenHeight) { bottom = screenHeight; top = bottom - v.getHeight(); } v.layout(left, top, right, bottom); lastX = (int) event.getRawX(); lastY = (int) event.getRawY(); break; case MotionEvent.ACTION_UP: x2 = event.getRawX(); y2 = event.getRawY(); Log.i("i", x1 + ",,," + y1 +",,,"+x2+",,,"+y2); double distance = Math.sqrt(Math.abs(x1-x2)*Math.abs(x1-x2)+Math.abs(y1-y2)*Math.abs(y1-y2));//两点之间的距离 Log.i("i", "x1 - x2>>>>>>"+ distance); if (distance < 15) { // 距离较小,当作click事件来处理 showToastDialog("点击了"); return false; } else { showToastDialog("滑动了"); return true ; } } return false; }
相关推荐
解决了android悬浮框的onTouch和onClick事件可以同存的问题。
此Demo是我进行改进的,既可以通过OnTouch对图片进行放大缩小移动,也可以对图片进行OnClick点击,OnLongClick点击。不会出现冲突。
下面小编就为大家带来一篇详谈Android中onTouch与onClick事件的关系(必看)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
使用OnTouch实现一个控件同时设置单击、双击、长按事件监听。
可直接运行的手势操作onTouch事件的demo
有一个Button 按钮,要想为该按钮设置onClick事件和OnTouch事件 mTestButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Log.d(TAG, onClick execute); } }...
Android onTouch事件传递机制
OnTouch事件的机制,容易出错的地方
用于解决一个界面内同时存在多个不同类型监听冲突的方法,实现类似QQHD版窗口拖动滚动点击效果
NULL 博文链接:https://johnnycmj.iteye.com/blog/2234305
android click 和onTouch 事件处理机制,极其详细介绍
相信不少朋友在刚开始...分不清onTouch(),onTouchEvent()和OnClick()之间的关系和先后顺序,所以觉得有必要搞清onTouch事件传递的原理。经过一段时间的琢磨以及相关博客的介绍,这篇文章就给大家详细的分析介绍下。
新手学习Android, ontouch事件处理的三种写法,1、接口实现,2、内部类,3、匿名内部类
自定义ViewSwitcher实现分屏及切换动画效果,利用Gesture Detector解决GridView的onTouch与onItemClick事件冲突
如何使用,参考:http://www.see-source.com/blog/300000022/670.htmlgithub地址:https://github.com/hanks-zyh/SlideLayout
view事件传递机制中,ViewEventActivty这个类 通过输出,可以知道,先执行父控件的dispatch事件,再执行子控件的dispatch事件。 一般顺序是是:父控件的:dispatchTouchEvent,onInterceptTouchEvent,子控件的...
Android中丰富多彩的onTouch事件.rar
丰富多彩的Android onTouch事件