文章标题
2015-08-11 12:29
453 查看
最近碰到一个问题 :
实现一个button按钮可以移动,但却出现另外一个问题 ,就是onTouch事件和onClick事件的冲突. 解决办法是:不要onClick()了 直接在onTouch的MotionEvent.ACTION_UP:中判断 位移如果小于自己设定的某个值(10), 就视为点击事件,否则 就是onTouch事件了:
setIB.setOnTouchListener(new OnTouchListener() { int lastX,lastY; int offsetX = 0; int offsetY = 0; @Override public boolean onTouch(View v, MotionEvent event) { int ea = event.getAction(); switch (ea) { case MotionEvent.ACTION_DOWN://把当前位置记录下来 lastX = (int) event.getRawX(); lastY = (int) event.getRawY(); offsetX = (int) event.getRawX(); offsetY = (int) event.getRawY(); System.out.println("触摸X:Y"+offsetX+":"+offsetY); break; case MotionEvent.ACTION_MOVE: int dx = (int) (event.getRawX()-lastX); int dy = (int) (event.getRawY()-lastY); l = v.getLeft() + dx; b = v.getBottom() + dy; r = v.getRight() + dx; t = v.getTop() + dy; if(l<0){ l=0; r=l+v.getWidth(); } if(t<0){ t=0; b=t+v.getHeight(); } if(r>screenWidth){ r=screenWidth; l=r-v.getWidth(); } if(b>screenHeight){ b=screenHeight; t=b-v.getHeight(); } v.layout(l, t, r, b); lastX = (int) event.getRawX(); lastY = (int) event.getRawY(); v.postInvalidate(); break; case MotionEvent.ACTION_UP: System.out.println("离开之前X:Y "+offsetX+":"+offsetY); System.out.println("get:"+event.getRawX()+":"+event.getRawY()); offsetX = (int) (event.getRawX()-offsetX); offsetY = (int) (event.getRawY()-offsetY); System.out.println("离开X:Y"+offsetX+":"+offsetY); if(Math.sqrt(Math.pow(offsetX, 2)+Math.pow(offsetY, 2)) > 10){ System.out.println("位移:"+Math.sqrt(Math.pow(offsetX, 2)+Math.pow(offsetY, 2))); System.out.println("没位移"); }else{//如果位移不够大就 当作onclick事件 System.out.println("onclick"); } break; } return true;//不向上出发了 } });
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories