文章标题
来源:互联网 发布:大学生单片机自学视频 编辑:程序博客网 时间:2024/05/18 01:36
最近碰到一个问题 :
实现一个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;//不向上出发了 } });
0 0
- 文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题 文章标题 文章标题 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 3.5Arrays & 3.6Multidimentional Arrays
- Doxygen 注释格式
- Java学习笔记:详解传值和传引用
- xcode APP 打包以及提交apple审核详细流程(新版本更新提交审核)
- MATLAB save函数使用
- 文章标题
- 集合, 数组,Comparable,Comparator
- dexposed框架Android在线热修复
- 在nodejs中使用富文本编辑器UEditor
- 杭电 HDU ACM 1225 Atlantis (线段树 扫描线 离散化 最基本)
- HDU 1025 DP+二分求解最长上升序列
- linux 文件操作 --copy_file
- Mysql replace 与 insert on duplicate效率分析
- 虚函数运行机制