上午测试报了一个bug:说是一只手指拖动虚拟摇杆上的View滑块不松,另一只手指点击Home键将App压后台,重新进入的时候,View滑块卡死了。

刚开始看到这个问题感觉很奇怪,因为正常情况下,手指离开屏幕,收到ACTION_UP事件后,滑块肯定是会返回中心点的。但是这种情况很明显就是没有收到ACTION_UP事件。后来在代码中打印了下Log,证实了我的想法。

那既然收不到ACTION_UP事件,我自己模拟一个ACTION_UP事件发给这个摇杆View就好了。

解决办法:

1.监听用户点击Home键的动作

android上监听Home键与Back键还不一样,不能在onKeyDown方法中去处理,必须要注册一个广播才能监听到Home键:

private void registerHomeReceiver(){IntentFilter homeFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);registerReceiver(homePressReceiver, homeFilter);}//HOME键监听private BroadcastReceiver homePressReceiver = new BroadcastReceiver() {final String SYSTEM_DIALOG_REASON_KEY = "reason";final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stubString action = intent.getAction();if(action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)){String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);System.out.println("reason : " + reason);if(reason!=null&&reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)){System.out.println("按HOME键使应用进入了后台");}}}};

需要注意的是,在Android8.0上最好使用动态广播的方式来注册,使用静态广播有时候会收不到消息。

另外,该广播除了能监听点击Home键外,还可以监听长按home键,以及按锁屏事件等,甚至是Activity切换的按键

2.当用户点击Home键后,手动模拟一个ACTION_UP事件发送给指定的View

private void sendTouchUpEvent2RockerView() {long downTime = SystemClock.uptimeMillis();long eventTime = SystemClock.uptimeMillis() + 100;float x = 0.0f;float y = 0.0f;int metaState = 0;MotionEvent event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_UP, x, y, metaState);mLeftControllerView.dispatchTouchEvent(event);mRightControllerView.dispatchTouchEvent(event);}

然后在广播接收者中去处理:

case Intent.ACTION_CLOSE_SYSTEM_DIALOGS:String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);if (reason != null && reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)) {sendTouchUpEvent2RockerView();}break;

完了之后试了一下,果然没有了先前的问题。

参考链接:

Android监听Home键

Android Home键监听

android MotionEvent.obtain模拟事件,自动触发

转载于:https://www.cnblogs.com/yongdaimi/p/9548559.html

Android-一只手指滑动View,另一只手指按Home键,重新进入后View状态无法更新的问题...相关推荐

  1. 移动端手指滑动,高度跟随手指滑动位置而改变

    效果:列表刚开始显示高度为200,手指滑动,列表高度随手指位置改变,列表最高高度为500 实现这个功能之前先说一下手指触摸事件 //手指按下触发 touchstart(event) {var touc ...

  2. Android自定义View,跟随手指滑动效果

    Android自定义View,实现跟随手指滑动效果, 效果如下: 一,重写onTouchEvent方法 最后返回true 二,在MotionEvent.ACTION_MOVE情况下改变自定义view ...

  3. Android平台的事件处理机制和手指滑动例子

    Android平台的事件处理机制有两种 基于回调机制的事件处理:Android平台中,每个View都有自己的处理事件的回调方法,开发人员可以通过重写View中的这些回调方法来实现需要的响应事件. 基于 ...

  4. android群英传 自定义滑动view,Android群英传学习之路-View的滑动

    滑动效果是如何产生的? 滑动一个View从本质上来说就是移动一个View,改变其当前的坐标.所以,想要滑动一个View,就必须监听该View的触摸事件,并且根据事件的坐标,不断的改变View的坐标从而 ...

  5. android仿苹果悬浮窗(自动停靠、随手指滑动、返回主屏幕)

    说明:本人写博客一来是为了方便日后查看项目,二来是希望能够和广大的程序猿相互交流学习,文章布局简单,如有嫌弃,请绕行,如有错误,请指出,谢谢. 实验环境:安卓6.0 魅族手机 悬浮窗主要有以下几个功能 ...

  6. 判断手指滑动方向 -- Android 学习之路

    通过onTouchEvent 事件实现判断手指滑动方向 今天在做2048的时候遇到的一个知识点,这里做一下总结 用到的知识点 Android屏幕坐标系 常用的触发事件 判断滑动方向 获取手指触屏时的坐 ...

  7. android 跟随动画,Android实现View拖拽跟随手指移动效果

    今天想实现这个功能,但是网上搜索代码,都是利用setPadding,setMargin 等方法去实现的,这在Android 4.0 以前是没问题的,但是,android 4.0 后系统已经提供了更简单 ...

  8. android模拟点击滑动,模拟Android的view点击和滑动监听

    一,简单形式的 /*模拟Android中的view 点击和滑动监听 * */ public class View { private OnClickListener onClickListener; ...

  9. Android BackgroundViewPager:类似桌面背景壁纸随手指滑动

     Android BackgroundViewPager:类似桌面背景壁纸随手指滑动 Android BackgroundViewPager要实现的功能和Android桌面极为类似,即,假设用户的 ...

  10. Android 模拟手指滑动

    这里的模拟手指滑动指的是模拟手指点击->移动到另外一个点->抬起三个步骤,用于实现某种特殊的左滑右滑 public void right(final Activity activity) ...

最新文章

  1. sqlserver 行转列
  2. 三角形css_纯 CSS 实现绘制各种三角形(各种角度)
  3. 数据结构 如何删除单向链表的倒数第m个元素
  4. MongoDB和Redis区别
  5. 【推荐】极简数独1.0源码
  6. secureCRT 右键的设置选中就copy or 选中即粘贴
  7. xcode 修改 infodictionary_安卓系统修改复位键生效时间
  8. 漫画:什么是时间复杂度
  9. 13亿美元的思想实验
  10. c++用什么软件编程_学习编程用什么做笔记比较好?
  11. 洛谷P2569 [SCOI2010]股票交易
  12. 算法复习周------“贪心问题之‘单源最短路径’”
  13. template.js 模板引擎
  14. Matlab画平滑曲线的两种方法( 拟合或插值后再用plot即可)
  15. 计算机学科a类排名,哈工大17个学科排名位列A类
  16. Python: PS 滤镜--碎片特效
  17. ASP.NET会话(Session) 转载自:寒羽枫(cityhunter172)
  18. 22图详解ElasticSearch 使用教程
  19. 【SPRD CAMERA】1 HAL层初始化流程
  20. 理解File's ower 和first respond

热门文章

  1. wepy框架组件通信
  2. nlp数据增强+SimBERTv2 +谷歌翻译回译
  3. 学生党开学季数码好物有哪些值得分享,分享实用性不错的数码好物
  4. 计算机一级怎么截图保存到桌面,如何将截图粘至电脑桌面
  5. 《程序员修炼之道》笔记(四)
  6. 疫情下,实体从业者如何快速转型线上生意?
  7. 手把手教你Photoshop蒙版的使用(三)
  8. MySQL数据库入门-新手常见问题答疑
  9. nodeJs相关知识
  10. android+qq浏览器,Android QQ浏览器:追求随心而动的感觉