实现悬浮球的桌面显示

本篇是Android实战之悬浮球菜单App实现的分支,做学习记录使用。
本篇介绍悬浮球的桌面显示部分,主要分为WindowManager部分,以及菜单的策略和显示位置的计算。

WindowManager

通过WindowManager来托管悬浮球view,首先初始化:

     mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);wmParams = new WindowManager.LayoutParams();wmParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;wmParams.format = PixelFormat.RGBA_8888;wmParams.width = WindowManager.LayoutParams.WRAP_CONTENT;wmParams.height = WindowManager.LayoutParams.WRAP_CONTENT;//这是我设置起始位置wmParams.gravity = Gravity.LEFT | Gravity.TOP;wmParams.x = 1000;wmParams.y = 500;//托管悬浮球viewmWindowManager.addView(mFloatingLayout, wmParams);//托管菜单viewmWindowManager.addView(menu, wmParams);

再通过setOnTouchListener()对悬浮球做追踪,实现可拖动:

private class FloatingListener implements View.OnTouchListener {@Overridepublic boolean onTouch(View v, MotionEvent event) {int action = event.getAction();if (!isExpanded) {switch (action) {case MotionEvent.ACTION_DOWN:isMove = false;mTouchStartX = (int) event.getRawX();mTouchStartY = (int) event.getRawY();mStartX = (int) event.getX();mStartY = (int) event.getY();break;case MotionEvent.ACTION_MOVE:mTouchCurrentX = (int) event.getRawX();mTouchCurrentY = (int) event.getRawY();wmParams.x += mTouchCurrentX - mTouchStartX;wmParams.y += mTouchCurrentY - mTouchStartY;mWindowManager.updateViewLayout(menu, wmParams);mWindowManager.updateViewLayout(mFloatingLayout, wmParams);mTouchStartX = mTouchCurrentX;mTouchStartY = mTouchCurrentY;break;case MotionEvent.ACTION_UP:mStopX = (int) event.getX();mStopY = (int) event.getY();Log.d(TAG, "initWindow: " + wmParams.x + "" + wmParams.y);if (abs(mStartX - mStopX) >= 1 || abs(mStartY - mStopY) >= 1) {isMove = true;}attachSide();break;}return isMove;}return false;}}public void attachSide(){if(wmParams.x<550){wmParams.x = 0;}else{wmParams.x = 1000;}mWindowManager.updateViewLayout(menu,wmParams);mWindowManager.updateViewLayout(mFloatingLayout,wmParams);}

其中的attachSide()是实现的贴边函数,这里出现的像素数字替换成统一的参数比较好,方便后期管理和适配。做到这里,就实现了悬浮球在桌面显示,并且可以拖动和自动贴边。当然,别忘了申请权限:

 startActivityForResult(new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName())), 0);@override
protected void onActivityResult(int requestCode, int resultCode, Intent data){super.onActivityResult(request, resultCode, data);if(requestCode == 0){if(!Settings.canDrawOverlays(this)){Toast.makeTest(this, "FAILED", Toast.LENGTH_SHORT).show();} else {Toast.makeTest(this, "SUCCEED", Toast.LENGTH_SHORT).show();//startService}}
}

在此处我采用的startActivityForResult来进行授权申请,成功授权后开启悬浮球服务,即可在窗口显示。

实现悬浮球的桌面显示相关推荐

  1. 小米多看电纸书 安装悬浮球 安装桌面 安装微信阅读 小米多看电纸书悬浮球

    效果 1.下载:小米电纸书完整驱动包+悬浮球.rar 下载链接 https://download.csdn.net/download/qq_44757034/12386466 2.压缩包放C盘 右键压 ...

  2. android 悬浮球简书,轻松自制flyme悬浮球

    前言 去年用了一整年的MX4Pro,魅族留给我最大的印象就是悬浮球了(质量问题我就不说了),左右滑动切换应用.上拉返回桌面.下拉打开通知栏.轻触返回...,一切都那么丝滑.然而自从上半年换成了s7de ...

  3. 悬浮球不用权限_Android 实现无需权限的悬浮球效果,可适配至Android 10

    前言: 最近闲来无事,突然想起搞一下悬浮球,之前的项目的悬浮球一直都需要授权,android6.0以后需要手动授权,悬浮球使用时就非常不便,这里为大家带来一种无需权限的悬浮球实现方式. 无需权限! 无 ...

  4. 通过Java高仿flyme悬浮球设计

    资源下载地址:https://download.csdn.net/download/sheziqiong/85796297 资源下载地址:https://download.csdn.net/downl ...

  5. android 魅族悬浮球,轻松自制flyme悬浮球

    前言 去年用了一整年的MX4Pro,魅族留给我最大的印象就是悬浮球了(质量问题我就不说了),左右滑动切换应用.上拉返回桌面.下拉打开通知栏.轻触返回...,一切都那么丝滑.然而自从上半年换成了s7de ...

  6. html防微信音乐,web高仿樊登H5/微信音乐播放悬浮球效果

    这两天完成了一个仿樊登 H5 的音乐播放悬浮球效果,这个效果跟微信音乐播放悬浮球的效果也很相似,今天总结一下实现的思路过程(基于 Vue 实现). 先来看看樊登 H5 的效果. 再来看看我的实现,挺完 ...

  7. 自定义悬浮球,提供一些快捷操作。比如一键静音,一键锁频,一键截屏,一键回桌面,手电筒等

    FloatingBall 项目地址:killer8000/FloatingBall  简介:自定义悬浮球,提供一些快捷操作.比如一键静音,一键锁频,一键截屏,一键回桌面,手电筒等 更多:作者   提 ...

  8. fooview辅助功能 shell_Fooview:一款功能超多的桌面悬浮球,帮你摆脱多余操作

    今天给大家推荐的这款软件是Fooview,也叫做FV悬浮球,适合于安卓端,这款软件非常的强大,不能认为它就是一个普普通通的悬浮球软件. 它除了是悬浮球工具外,还有很多其它的功能,官方号称常用功能超越1 ...

  9. js拖拽360桌面悬浮球代码

    js拖拽360桌面悬浮球代码 原生js制作简单好用的360桌面悬浮球,可拖拽到浏览器边缘,自动贴边,自动适应屏幕效果. 演示地址 下载地址

最新文章

  1. 60行代码俄罗斯方块
  2. DNN开发中的一些细节(3)
  3. 详细解读Spring2.5 +Struts1.3 框架(使用Spring声明式事物管理和springjjdbc模板)
  4. Guava入门~Lists
  5. tomcat常见配置及优化、升级
  6. 【动态规划】完全背包问题:构成m的最少个数
  7. F1-Score相关概念
  8. 文字处理技术:试图通过多次布局解决布局问题的思路是否可以避免?
  9. 【实战】替代Flash的,基于JQuery、HTML5文件上传插件
  10. 从哪里寻找游戏工具集(Game dev toolset)开发的资料?
  11. Java基础 - 替罪羊树(Scapegoat Tree)
  12. MongoClient添加连接配置信息
  13. SSM考试题库管理系统毕业设计源码069043
  14. windows的cmd命令检测ip或者端口是否连通
  15. FTP客户端代码解析
  16. 【已解决】docker overlay2占用大量磁盘空间处理方法
  17. 某某读书搜索__DATA__分析
  18. 香港公司--离岸帐户现金
  19. C/C++编程:tan、atan、sin、cos等三角函数用法的代码演示及结果,注意角度和弧度的转换!
  20. HashMap 深拷贝

热门文章

  1. 从0带您打造企业级 Vue 服务器渲染 Nuxt.js (一) 入门
  2. win10搭FTP与单片机通信:配置+编程实现的完整流程
  3. 百度文心一言推出内测专用独立 App;暴雪回应被网易起诉:未收到相关诉状;iOS 17或支持第三方应用商店 | 极客头条
  4. Apple 好莱坞艳照门的安全分析
  5. 项目落地 - 智慧海绵城市(物联网技术应用)
  6. 日本人的姓及一些姓氏的读法(转)
  7. python打字_使用Python编写打字训练小程序
  8. Oracle魔改linux,linux shell脚本攻略 第3版 pdfssr 魔改v3一键
  9. 健身装备有哪些推荐?健身运动装备品牌排行榜
  10. 分享75个JS特效倒计时,总有一款适合您