深入理解FloatMenu交互逻辑贴边、展开与拖动状态完整解析【免费下载链接】FloatMenuSampleandroid 悬浮窗菜单可在launcher或app中使用项目地址: https://gitcode.com/gh_mirrors/fl/FloatMenuSampleFloatMenu是一款功能强大的Android悬浮窗菜单组件能够在launcher或应用中提供便捷的交互入口。本文将全面解析其核心交互逻辑包括智能贴边、菜单展开和拖拽移动三大关键状态的实现原理帮助开发者快速掌握这一高效交互组件的工作机制。核心交互状态概览 FloatMenu通过三种基础状态构建完整交互体验贴边收缩最小化状态、展开菜单功能选择状态和自由拖动位置调整状态。这些状态通过手势操作无缝切换形成流畅的用户体验。图1FloatMenu完整交互流程演示展示贴边、拖动和展开状态的切换效果智能贴边机制自动优化屏幕空间贴边触发条件与实现FloatMenu的智能贴边功能由FloatLogoMenu.java中的startShrinkTask()方法控制默认在3秒无操作后自动触发// 启动贴边任务 private void startShrinkTask() { Log.d(TAG, startShrinkTask: 启动贴边任务 mAutoShrinkDelay ms后贴边); // 延迟执行贴边逻辑 }贴边过程通过shrinkToEdge()方法实现根据悬浮窗当前位置自动选择左/右贴边方向当悬浮窗中心位于屏幕左侧时执行左贴边仅显示部分logo当悬浮窗中心位于屏幕右侧时执行右贴边仅显示部分logo贴边状态的恢复用户点击贴边状态的悬浮窗时会通过restoreFromShrink()方法恢复至完全可见状态// 从贴边状态恢复 private void restoreFromShrink() { // 重置贴边状态 Log.d(TAG, restoreFromShrink: 恢复完成isShrunk设置为false启动贴边任务); // 恢复完成后启动贴边任务3秒后自动贴边 }图2FloatMenu贴边状态与展开状态对比左侧为贴边收缩状态右侧为完全展开状态菜单展开逻辑双向扩展的交互设计展开方向的智能判断FloatMenu支持左右双向展开展开方向由floatEventUp()方法中的位置判断逻辑决定// 改进的临界点判断基于logo中心位置而不是触摸点 int logoCenter wmParams.x mFloatLogo.getWidth() / 2; if (logoCenter mScreenWidth / 2) { mHintLocation LEFT; // 左侧展开 } else { mHintLocation RIGHT; // 右侧展开 }展开动画与布局调整展开动画通过openMenu()方法实现根据判断的展开方向调整菜单位置右侧展开菜单右边缘贴紧屏幕右边缘左侧展开菜单从左边缘开始显示// 计算展开菜单的x坐标 if (mHintLocation RIGHT) { // 右侧展开让整个布局的右边缘贴着屏幕右边缘 wmParams.x mScreenWidth - totalWidth; } else { // 左侧展开从左边缘开始 wmParams.x 0; }拖动交互实现流畅的位置调整体验拖动事件的完整处理FloatMenu的拖动功能通过touchListener实现完整处理了触摸事件的三个阶段private final OnTouchListener touchListener new OnTouchListener() { Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: // 触摸开始 floatEventDown(event); break; case MotionEvent.ACTION_MOVE: // 触摸移动 floatEventMove(event); break; case MotionEvent.ACTION_UP: // 触摸结束 case MotionEvent.ACTION_CANCEL: floatEventUp(); break; } return true; } };拖动边界限制与位置计算在floatEventMove()方法中实现了拖动过程中的边界限制确保悬浮窗不会移出屏幕// X坐标边界限制不允许x为负数也不允许xlogo宽度大于屏幕宽度 if (wmParams.x 0) { wmParams.x 0; } else if (wmParams.x logoWidth mScreenWidth) { wmParams.x mScreenWidth - logoWidth; } // Y坐标边界限制不允许y小于状态栏高度也不允许ylogo高度大于屏幕高度 if (wmParams.y mStatusBarHeight) { wmParams.y mStatusBarHeight; } else if (wmParams.y logoHeight screenHeight) { wmParams.y screenHeight - logoHeight; }状态切换的核心逻辑FloatMenu的三种状态通过以下逻辑实现无缝切换静止状态→拖动状态用户触摸并移动超过阈值logo宽度的1/4时触发拖动状态→贴边状态拖动结束后3秒无操作自动触发贴边状态→展开状态用户点击贴边的悬浮窗后触发展开状态→贴边状态菜单关闭后自动启动贴边任务核心状态管理代码位于FloatLogoMenu.java中通过isDrag拖动标记、isShrunk贴边标记和isExpanded展开标记三个变量协同控制。总结与最佳实践FloatMenu通过精妙的状态管理和手势处理实现了既不占用屏幕空间又能快速访问的悬浮菜单体验。其核心优势包括智能空间管理自动贴边功能减少屏幕占用人性化交互基于位置的双向展开设计流畅拖动体验边界限制与平滑动画开发者可通过调整FloatLogoMenu.java中的mAutoShrinkDelay参数修改自动贴边延迟时间或通过autoShrink()方法在代码中动态设置.autoShrink(5000) // 设置5秒后自动贴边掌握这些交互逻辑后开发者可以根据实际需求定制FloatMenu的交互行为为应用添加更加便捷高效的悬浮操作入口。【免费下载链接】FloatMenuSampleandroid 悬浮窗菜单可在launcher或app中使用项目地址: https://gitcode.com/gh_mirrors/fl/FloatMenuSample创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
如何使用VQEngine实现高性能HDR渲染:从理论到实践 如何使用VQEngine实现高性能HDR渲染:从理论到实践 【免费下载链接】VQEngine Multi-threaded DirectX12 renderer w/ HDR, PBR & Multi-monitor support 项目地址: https://gitcode.com/gh_mirrors/vq/VQEngine VQEngine是一款支持HDR、PBR和多显示器的多…
倒计时90天医考冲刺,AI自适应学习系统正在分配最后一批专属训练资源(限前2000名) 更多请点击: https://codechina.net 第一章:AI赋能医考冲刺的战略价值与资源稀缺性认知 在国家医师资格考试通过率长期徘徊于60%–75%的现实背景下,优质备考资源的结构性短缺已成为考生群体普遍面临的刚性约束。传统题库更新滞后、个性化反馈…
终极魔兽争霸3优化指南:5分钟解决画面拉伸、帧率锁定和中文路径问题 终极魔兽争霸3优化指南:5分钟解决画面拉伸、帧率锁定和中文路径问题 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为经典游戏魔兽争…
【合肥理工学校】招生老师电话是多少?这些要点要知道 - zshll 【合肥理工学校】招生老师电话是多少?这些要点要知道 余老师:15656073379(微信同号)负责热门专业名额锁定、升学班咨询 每年中考出分前后,合肥理工学校的招生咨询都会迎来高峰期。不少家长和学生在网上翻来覆去找…
30KG重载机器人测评:从柔性力控 恒力打磨出发,越疆智能拉开优势 深耕工业机器人落地测评多年,我始终坚持一个核心产业判断:2026年的30KG重载协作机器人赛道,参数内卷的时代已经彻底终结。当下制造企业的选型逻辑,早已从“能不能搬、能不能码”的基础需求,升级为重载量产稳定度、柔性…
爆料!12月PMP新考纲首考或是“最容易过”的一次?AI和ESG首次入题怎么考? 大家好!前面讲了基础信息、新旧考纲对比、在职备考时间管理,今天咱们换个角度——聊点实在的、好玩的、可能你之前没听过的东西。一、先爆个料:12月新考纲首考,可能是“红利期”先给大家吃个定心丸——12月是新考纲在大陆的首次落…
小A问答 | C盘又双叒叕红了?查收这份分级清理指南,专治各种不敢删 很多用户面对C盘爆满,只有两种操作:要么硬扛着不敢动,每天忍受卡顿;要么一咬牙乱删一气,结果系统直接蓝屏崩溃,最后只能抱着电脑去重装系统,照片资料全丢......今天小A为大家分享一份<C盘分级…
大模型如何学会“拆任务”?自主规划Agent的技术跃迁路径 2026年,AI行业最核心的变化,是大模型从“会聊天”走向“会干活”。而“会干活”的第一步,是学会“拆任务”。传统RPA的局限在于“只行动不思考”,只能执行预设的固定脚本,一旦遇到规则未覆盖的情况就停下。通用大模型则…
快速上手 Apk.1-Installer:3 步解决腾讯 apk.1 安装难题 快速上手 Apk.1-Installer:3 步解决腾讯 apk.1 安装难题 【免费下载链接】Apk.1-Installer 用于直接安装apk.1,专治腾讯改文件名 项目地址: https://gitcode.com/gh_mirrors/ap/Apk.1-Installer Apk.1-Installer 是一款专为解决腾讯 apk.1 安装问…
ffmpeg-static 跨平台多媒体处理架构解析与技术实践 ffmpeg-static 跨平台多媒体处理架构解析与技术实践 【免费下载链接】ffmpeg-static ffmpeg static binaries for Mac OSX and Linux and Windows 项目地址: https://gitcode.com/gh_mirrors/ff/ffmpeg-static ffmpeg-static 项目为 macOS、Linux 和 Windows 三大主流操…
7步掌握KMS智能激活工具:Windows和Office永久激活完整方案 7步掌握KMS智能激活工具:Windows和Office永久激活完整方案 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO KMS_VL_ALL_AIO是一款功能强大的智能激活脚本工具,专为Windows…
Linux 二进制分析利器:strings 命令从入门到实战全解 一、命令简介strings 命令用于在二进制文件、可执行文件、对象文件或任何数据文件中查找并提取可打印的字符串序列。它默认识别长度至少为 4 个字符的可打印 ASCII 字符串(以换行符或空字符终止)。该工具在逆向工程、调试和二进制文件分析中非常有用&…
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集 Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…
智慧飞行 大疆无人机一站式智能管控平台/支持大疆机场/私有化部署 从航线规划、自动飞行、AI识别到数据管理,一个平台全搞定 智慧飞行-大疆无人机一站式智能管控平台/支持大疆机场/私有化部署 企业级全域智能无人机一体化管控平台源码! 专为电力巡检、安防监控、应急救援、测绘勘察等行业打造,让您的无人机舰队实现 “无人化、自动化、智能化” 管理! 🎯 …
揭秘ChatGPT+Mathematica协同教学:为什么92%的初学者在72小时内建立函数直觉? 更多请点击: https://codechina.net 第一章:AI帮助理解数学概念 人工智能正以前所未有的方式重塑数学学习的路径。通过自然语言处理与符号计算的深度融合,AI不仅能解析抽象定义,还能将定理、证明和几何直觉转化为可交互、可验证的…
[C++]内存管理:串顺序存储的内存回收 在串(字符串)的顺序存储中,内存回收的方式取决于字符串的存储方式以及所使用的编程语言和相关库。以下以 C 为例进行说明,因为 C 对内存管理有较为直接的控制。 1. 基于 char 数组的串顺序存储 如果使用普通的 char 数组来存储字…
移动端游戏功耗测试实战:电流、功率、亮度和场景对比 移动端游戏功耗测试:先控制变量,再比较优化是否真的省电 摘要:功耗测试最容易犯的错误,是拿两次不同温度、不同亮度、不同场景的平均功率直接比较。本文给出一套可复现的游戏功耗测试方法,覆盖引擎特性验证、版本回归和黑盒体验测试,并说明如何把功耗与帧率、温控、CPU/G…
足球口袋教练 HarmonyOS 离线应用实战(03/20):ArkUI 首页仪表盘搭建 本文是“足球口袋教练 HarmonyOS 离线应用实战”系列第 3 篇。示例项目是一个 HarmonyOS / ArkTS / ArkUI 编写的离线足球训练助手,围绕真实页面、真实截图和可复现操作展开。 本篇要解决的问题 训练 App 的首页不能只展示欢迎语,它要解决“我现在该点哪…