实现悬浮球的桌面显示
实现悬浮球的桌面显示
本篇是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.下载:小米电纸书完整驱动包+悬浮球.rar 下载链接 https://download.csdn.net/download/qq_44757034/12386466 2.压缩包放C盘 右键压 ...
- android 悬浮球简书,轻松自制flyme悬浮球
前言 去年用了一整年的MX4Pro,魅族留给我最大的印象就是悬浮球了(质量问题我就不说了),左右滑动切换应用.上拉返回桌面.下拉打开通知栏.轻触返回...,一切都那么丝滑.然而自从上半年换成了s7de ...
- 悬浮球不用权限_Android 实现无需权限的悬浮球效果,可适配至Android 10
前言: 最近闲来无事,突然想起搞一下悬浮球,之前的项目的悬浮球一直都需要授权,android6.0以后需要手动授权,悬浮球使用时就非常不便,这里为大家带来一种无需权限的悬浮球实现方式. 无需权限! 无 ...
- 通过Java高仿flyme悬浮球设计
资源下载地址:https://download.csdn.net/download/sheziqiong/85796297 资源下载地址:https://download.csdn.net/downl ...
- android 魅族悬浮球,轻松自制flyme悬浮球
前言 去年用了一整年的MX4Pro,魅族留给我最大的印象就是悬浮球了(质量问题我就不说了),左右滑动切换应用.上拉返回桌面.下拉打开通知栏.轻触返回...,一切都那么丝滑.然而自从上半年换成了s7de ...
- html防微信音乐,web高仿樊登H5/微信音乐播放悬浮球效果
这两天完成了一个仿樊登 H5 的音乐播放悬浮球效果,这个效果跟微信音乐播放悬浮球的效果也很相似,今天总结一下实现的思路过程(基于 Vue 实现). 先来看看樊登 H5 的效果. 再来看看我的实现,挺完 ...
- 自定义悬浮球,提供一些快捷操作。比如一键静音,一键锁频,一键截屏,一键回桌面,手电筒等
FloatingBall 项目地址:killer8000/FloatingBall 简介:自定义悬浮球,提供一些快捷操作.比如一键静音,一键锁频,一键截屏,一键回桌面,手电筒等 更多:作者 提 ...
- fooview辅助功能 shell_Fooview:一款功能超多的桌面悬浮球,帮你摆脱多余操作
今天给大家推荐的这款软件是Fooview,也叫做FV悬浮球,适合于安卓端,这款软件非常的强大,不能认为它就是一个普普通通的悬浮球软件. 它除了是悬浮球工具外,还有很多其它的功能,官方号称常用功能超越1 ...
- js拖拽360桌面悬浮球代码
js拖拽360桌面悬浮球代码 原生js制作简单好用的360桌面悬浮球,可拖拽到浏览器边缘,自动贴边,自动适应屏幕效果. 演示地址 下载地址
最新文章
- 60行代码俄罗斯方块
- DNN开发中的一些细节(3)
- 详细解读Spring2.5 +Struts1.3 框架(使用Spring声明式事物管理和springjjdbc模板)
- Guava入门~Lists
- tomcat常见配置及优化、升级
- 【动态规划】完全背包问题:构成m的最少个数
- F1-Score相关概念
- 文字处理技术:试图通过多次布局解决布局问题的思路是否可以避免?
- 【实战】替代Flash的,基于JQuery、HTML5文件上传插件
- 从哪里寻找游戏工具集(Game dev toolset)开发的资料?
- Java基础 - 替罪羊树(Scapegoat Tree)
- MongoClient添加连接配置信息
- SSM考试题库管理系统毕业设计源码069043
- windows的cmd命令检测ip或者端口是否连通
- FTP客户端代码解析
- 【已解决】docker overlay2占用大量磁盘空间处理方法
- 某某读书搜索__DATA__分析
- 香港公司--离岸帐户现金
- C/C++编程:tan、atan、sin、cos等三角函数用法的代码演示及结果,注意角度和弧度的转换!
- HashMap 深拷贝
热门文章
- 从0带您打造企业级 Vue 服务器渲染 Nuxt.js (一) 入门
- win10搭FTP与单片机通信:配置+编程实现的完整流程
- 百度文心一言推出内测专用独立 App;暴雪回应被网易起诉:未收到相关诉状;iOS 17或支持第三方应用商店 | 极客头条
- Apple 好莱坞艳照门的安全分析
- 项目落地 - 智慧海绵城市(物联网技术应用)
- 日本人的姓及一些姓氏的读法(转)
- python打字_使用Python编写打字训练小程序
- Oracle魔改linux,linux shell脚本攻略 第3版 pdfssr 魔改v3一键
- 健身装备有哪些推荐?健身运动装备品牌排行榜
- 分享75个JS特效倒计时,总有一款适合您