一个按键的工具类,处理点击、双击、长按等事件
来源:互联网 发布:画图软件图标大全 编辑:程序博客网 时间:2024/06/07 19:29
public class KeyUtils {private boolean isVolumeDown = false;private boolean isVolumeUp = false;private boolean isMenu = false;private int currentKeyCode = 0;private static Boolean isDoubleClick = false;private static Boolean isLongClick = false;CheckForLongPress mPendingCheckForLongPress = null;CheckForDoublePress mPendingCheckForDoublePress = null;Handler mHandler = new Handler();Context mContext = null;private String TAG = "";public KeyUtils(Context context, String tag) {mContext = context;TAG = tag;}public void dispatchKeyEvent(KeyEvent event) {int keycode = event.getKeyCode();// 有不同按键按下,取消长按、短按的判断if (currentKeyCode != keycode) {removeLongPressCallback();isDoubleClick = false;}// 处理长按、单击、双击按键if (event.getAction() == KeyEvent.ACTION_DOWN) {checkForLongClick(event);} else if (event.getAction() == KeyEvent.ACTION_UP) {checkForDoubleClick(event);}if (keycode == KeyEvent.KEYCODE_VOLUME_DOWN) {if (event.getAction() == KeyEvent.ACTION_DOWN) {isVolumeDown = true;} else if (event.getAction() == KeyEvent.ACTION_UP) {isVolumeDown = false;}} else if (keycode == KeyEvent.KEYCODE_VOLUME_UP) {if (event.getAction() == KeyEvent.ACTION_DOWN) {isVolumeUp = true;} else if (event.getAction() == KeyEvent.ACTION_UP) {isVolumeUp = false;}} else if (keycode == KeyEvent.KEYCODE_MENU) {if (event.getAction() == KeyEvent.ACTION_DOWN) {isMenu = true;} else if (event.getAction() == KeyEvent.ACTION_UP) {isMenu = true;}}// 判断组合按键if (isVolumeDown&& isVolumeUp&& isMenu&& (keycode == KeyEvent.KEYCODE_VOLUME_UP|| keycode == KeyEvent.KEYCODE_VOLUME_DOWN || keycode == KeyEvent.KEYCODE_MENU)&& event.getAction() == KeyEvent.ACTION_DOWN) {// 组合按键事件处理;isVolumeDown = false;isVolumeUp = false;isMenu = false;}}private void removeLongPressCallback() {if (mPendingCheckForLongPress != null) {mHandler.removeCallbacks(mPendingCheckForLongPress);}}private void checkForLongClick(KeyEvent event) {int count = event.getRepeatCount();int keycode = event.getKeyCode();if (count == 0) {currentKeyCode = keycode;} else {return;}if (mPendingCheckForLongPress == null) {mPendingCheckForLongPress = new CheckForLongPress();}mPendingCheckForLongPress.setKeycode(event.getKeyCode());mHandler.postDelayed(mPendingCheckForLongPress, 1000);}class CheckForLongPress implements Runnable {int currentKeycode = 0;public void run() {isLongClick = true;longPress(currentKeycode);}public void setKeycode(int keycode) {currentKeycode = keycode;}}private void longPress(int keycode) {Log.i(TAG, "--longPress 长按事件--" + keycode);}private void singleClick(int keycode) {Log.i(TAG, "--singleClick 单击事件--" + keycode);}private void doublePress(int keycode) {Log.i(TAG, "---doublePress 双击事件--" + keycode);}private void checkForDoubleClick(KeyEvent event) {// 有长按时间发生,则不处理单击、双击事件removeLongPressCallback();if (isLongClick) {isLongClick = false;return;}if (!isDoubleClick) {isDoubleClick = true;if (mPendingCheckForDoublePress == null) {mPendingCheckForDoublePress = new CheckForDoublePress();}mPendingCheckForDoublePress.setKeycode(event.getKeyCode());mHandler.postDelayed(mPendingCheckForDoublePress, 500);} else {// 500ms内两次单击,触发双击isDoubleClick = false;doublePress(event.getKeyCode());}}class CheckForDoublePress implements Runnable {int currentKeycode = 0;public void run() {if (isDoubleClick) {singleClick(currentKeycode);}isDoubleClick = false;}public void setKeycode(int keycode) {currentKeycode = keycode;}}private void removeDoublePressCallback() {if (mPendingCheckForDoublePress != null) {mHandler.removeCallbacks(mPendingCheckForDoublePress);}}}可以在工程中直接引用。
0 0
- 一个按键的工具类,处理点击、双击、长按等事件
- ListView的长按键事件的处理
- Android系统中自定义按键的短按、双击、长按事件
- Android系统中自定义按键的短按、双击、长按事件
- Android 横屏启动activity,点击屏幕的单击、双击和长按事件
- jQuery事件函数-点击、双击、键盘按键、鼠标滑动、失去焦点、显示哪个 DOM 元素触发了事件/返回事件的类型。等
- 利用RecycleView实现类似ListView的Item点击,长按等操作事件以及点击后每一项在添加一个列表
- 题目:多功能按键设计。利用一个I/O口,接一个按键,实现3功能操作:单击 + 双击 + 长按。
- Android开发--事件的处理/按键按下,弹起,触摸事件等
- 最完美最官方的做法给RecylerView添加点击,长按等事件
- Android view的单击,双击,长按事件监听
- recycleview的点击,长按事件
- RecyclerView的item点击,长按事件
- 【unity3d】一个关于按键点击事件的小错误
- swift下给控件添加点击事件(双击、捏、旋转、拖动、划动、长按)
- 按键事件的处理
- 按键事件的处理
- Launcher桌面点击&长按&拖动事件处理流程分析
- UOJ 171 [WC2016]挑战NPC
- LightOJ 1038 Race to 1 Again【概率DP】
- DirectX导图(5):色彩
- CSS的单位
- 输入和输出(IO)流的简单介绍
- 一个按键的工具类,处理点击、双击、长按等事件
- Android中去掉标题栏的几种方法(三种)
- HDU 4549 矩阵快速幂 + 快速幂取模 + 费马小定理
- DirectX导图(6):灯光
- JavaScript的那些坑之闭包
- 洛谷 P1772 [ZJOI2006] 物流运输
- CF 671D Roads in Yusland 线段树维护代价合并的思想 ★ ★ ★ ★
- python json详解
- Android之应用中执行Linux命令