Android的Button按钮,ACTION_UP事件不触发解决方案
2017-08-22 15:17
549 查看
Android的Button按钮,ACTION_UP事件不触发解决方案
在android 编程时,有时候要实现当Button一直按下的时候,执行一些逻辑代码,当按钮弹起的时候,终止这些逻辑代码的执行。
比如在 设置页面的滑动开关时,如果不监听ACTION_CANCEL,在滑动到中间时,如果你手指上下移动,就是移动到开关控件之外,就会造成开关的按钮停顿在中间位置。
在一般情况下,实现这个逻辑需要注册OnTouchListener监听,OnTouchListener的OnTouch方法中代码如下:
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
//按钮按下逻辑
break;
case MotionEvent.ACTION_UP:
//按钮弹起逻辑
break;
}
在一般情况下,这样写是没有问题的,
但是当手指快速滑过这个Button时,就会发现只触发了
ACTION_DOWN时间,没有触发ACTION_UP,就会导致,按钮按下的逻辑代码一直会执行。当焦点移动到件之外,此时会触发ACTION_CANCEL,而不是ACTION_UP,造成按下的逻辑一直会执行。
为了解决这个问题,上述代码可以需要修改为:
switch (event.getAction()) { case MotionEvent.ACTION_DOWN: //按钮按下逻辑 break; case MotionEvent.ACTION_UP: //按钮弹起逻辑 break; case MotionEvent.ACTION_CANCEL: //按钮弹起逻辑 break; }
ACTION_UP处理的是在Button原位置弹起,ACTION_CANCEL处理的是焦点离开Button,两者都需要处理
,才能解决这个问题。
示例(我这个是在按下的时候,让按钮放大,手抬起的时候缩小操作):
login_with_sina.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: System.out.println("++++++key_down"); AnimUtil.showOnFocusAnimation(login_with_sina); break; case MotionEvent.ACTION_UP: System.out.println("++++++key_down"); AnimUtil.showLooseFocusAinimation(login_with_sina); break; case MotionEvent.ACTION_CANCEL: System.out.println("++++++key_down"); AnimUtil.showLooseFocusAinimation(login_with_sina); break; } return true; } });
css3/html5
findever 3年前
(2014-09-22) 5358浏览 0评论
在开发前端页面的时候,监听了touch start touchmove和touchend事件,结果发现经常不会触发touchend事件,调试了很久,后来发现,只要在touchmove中preventDefault阻止默认事件的执行就可以触发touchend事件,解决完这个问题后,放狗搜了下,找到了个比较靠谱的解释:
http://stackoverflow.com/questions/7691551/touchend-event-in-ios-webkit-not-firing
大概就是说,touchmove阶段,系统会判断是否需要滚动,如果touchmove阶段没有阻止默认滚动事件,那么系统就会接管touch事件,并触发touchcancle事件。。
恩,自从有了weinre,踩坑也不是很担心了。。
相关文章推荐
- Android的Button按钮,ACTION_UP事件不触发解决方案
- Android的Button按钮,ACTION_UP事件不触发解决方案
- Android的Button按钮,ACTION_UP事件不触发解决方案
- Android的Button按钮,ACTION_UP事件不触发解决方案
- Android的OnTouch事件,添加触摸颜色变化,ACTION_UP事件不触发解决方案
- Button中MouseLeftButtonDown和MouseLeftButtonUp事件无法触发的解决方案
- Android 触发Button按钮事件的三种方式
- android 触发Button按钮事件的三种方式
- 在android中用代码触发一个按钮的点击事件的代码是: buttonName.performClick();
- android按钮拖动Button 在up事件中做弹出菜单调用(通过判断坐标解决事件冲突问题)
- Button中MouseLeftButtonDown和MouseLeftButtonUp事件无法触发的解决方案
- Button中 MouseLeftButtonDown和MouseLeftButtonUp 事件无法触发的解决方案 (转)
- Android下listview每个Item中包含有按钮,为什么在点击某一行按钮的时候,同时有多行button触发了响应事件?
- Android ActionBar Home按钮返回事件处理的两种方式:
- 如何通过程序触发按钮上的Action事件?
- Android点击Button按钮的四种事件监听方法总结
- 在TextBox中点击回车时 触发指定按钮click事件的解决方案
- Android:Back button 和 Action Bar UP button 不完全解析
- js实现监听button按钮点击事件触发file点击事件
- 解决Android按住空白区域,导致点击其他按钮无法触发点击事件的问题