android中根据touch事件判断单击及双击
来源:互联网 发布:优酷会员如何解绑淘宝 编辑:程序博客网 时间:2024/05/21 10:33
private static final int MAX_INTERVAL_FOR_CLICK = 250; private static final int MAX_DISTANCE_FOR_CLICK = 100; private static final int MAX_DOUBLE_CLICK_INTERVAL = 500; int mDownX = 0; int mDownY = 0; int mTempX = 0; int mTempY = 0; boolean mIsWaitUpEvent = false; boolean mIsWaitDoubleClick = false; Runnable mTimerForUpEvent = new Runnable() { public void run() { if (mIsWaitUpEvent) { Log.d(LOG_TAG, "The mTimerForUpEvent has executed, so set the mIsWaitUpEvent as false"); mIsWaitUpEvent = false; } else { Log.d(LOG_TAG, "The mTimerForUpEvent has executed, mIsWaitUpEvent is false,so do nothing"); } } }; @Override public boolean onTouchEvent(MotionEvent event) { if (!mIsWaitUpEvent && event.getAction() != MotionEvent.ACTION_DOWN) { return super.onTouchEvent(event); } switch (event.getAction()) { case MotionEvent.ACTION_DOWN: mDownX = (int) event.getX(); mDownY = (int) event.getY(); mIsWaitUpEvent = true; postDelayed(mTimerForUpEvent, MAX_INTERVAL_FOR_CLICK); break; case MotionEvent.ACTION_MOVE: mTempX = (int) event.getX(); mTempY = (int) event.getY(); if (Math.abs(mTempX - mDownX) > MAX_DISTANCE_FOR_CLICK || Math.abs(mTempY - mDownY) > MAX_DISTANCE_FOR_CLICK) { mIsWaitUpEvent = false; removeCallbacks(mTimerForUpEvent); Log.d(LOG_TAG, "The move distance too far:cancel the click"); } break; case MotionEvent.ACTION_UP: mTempX = (int) event.getX(); mTempY = (int) event.getY(); if (Math.abs(mTempX - mDownX) > MAX_DISTANCE_FOR_CLICK || Math.abs(mTempY - mDownY) > MAX_DISTANCE_FOR_CLICK) { mIsWaitUpEvent = false; removeCallbacks(mTimerForUpEvent); Log.d(LOG_TAG, "The touch down and up distance too far:cancel the click"); break; } else { mIsWaitUpEvent = false; removeCallbacks(mTimerForUpEvent); onSingleClick(); return super.onTouchEvent(event); } case MotionEvent.ACTION_CANCEL: mIsWaitUpEvent = false; removeCallbacks(mTimerForUpEvent); Log.d(LOG_TAG, "The touch cancel state:cancel the click"); break; default: Log.d(LOG_TAG, "irrelevant MotionEvent state:" + event.getAction()); } return super.onTouchEvent(event); } Runnable mTimerForSecondClick = new Runnable() { @Override public void run() { if (mIsWaitDoubleClick) { Log.d(LOG_TAG, "The mTimerForSecondClick has executed,so as a singleClick"); mIsWaitDoubleClick = false; // at here can do something for singleClick!! } else { Log.d(LOG_TAG, "The mTimerForSecondClick has executed, the doubleclick has executed ,so do thing"); } } }; public void onSingleClick() { if (mIsWaitDoubleClick) { onDoubleClick(); mIsWaitDoubleClick = false; removeCallbacks(mTimerForSecondClick); } else { mIsWaitDoubleClick = true; postDelayed(mTimerForSecondClick, MAX_DOUBLE_CLICK_INTERVAL); } } public void onDoubleClick() { Log.d(LOG_TAG,"we can do sth for double click here"); }
3 0
- android中根据touch事件判断单击及双击
- 区分 touch 事件是单击还是双击
- iOS touch事件单击双击区分响应
- js判断鼠标单击或者双击事件
- android处理单击双击和滑动事件
- Android 鼠标事件 (单击,双击,滑动)
- android识别 单击和双击事件
- Android 鼠标事件 (单击,双击,滑动)
- Android 触屏事件 (单击,双击,滑动)
- android处理单击双击和滑动事件
- android识别 单击和双击事件
- android鼠标单击双击事件互不影响
- DataGrid中添加单击或者双击事件
- Javascript判断单击双击
- gridview 双击单击事件
- 键值判断单击双击和长按事件
- Android中按钮单击事件及监听器的实现方式
- iPhone开发之区分 touch 事件是单击还是双击的方法
- zeromq源码阅读 —— Msg.hpp & Msg.cpp 的 msg_t (zmq中的消息)
- JS操作DOM元素属性和方法(转)
- 博弈论, 取石子游戏1
- linux系统下如何解压RAR文件软件rarforlinux
- FIFO队列并发同步访问 C++ 实现 ~~~
- android中根据touch事件判断单击及双击
- 使用uploadPreview插件上传文件并且预览
- [文件系统]文件系统学习笔记(十一)——mount系统调用(其它)
- 黑马程序员_7k面试题学习笔记
- arm-linux的gdb移植
- Biorhythms(数论)
- zmq源码阅读——Msg.hpp & Msg.cpp 的 相关操作 (zmq中的消息)
- SVN操作
- android闪屏效果实现