v1.2.1 · 可拖动悬浮球
悬浮窗改为可拖动球形
原来是一个矩形小窗,显示难看且遮挡内容。现在改成圆形悬浮球。
交互
| 操作 | 行为 |
|---|---|
| 按住拖动 | 可拖到屏幕任意位置,边界自动夹紧(不会拖丢) |
| 松手 | 自动吸附到最近的屏幕边缘 |
| 3 秒不碰 | 缩成一道半透明细弧躲到边上,不碍事 |
| 点击球体 | 立即展开,重置倒计时 |
| 状态指示 | 绿点=运行中,红点=已停止 |
一个关键的实现选择
收起时只偏移绘制内容(canvas.translate),窗口本身仍留在屏内。
为什么不直接把窗口移出屏幕:那样露出的 14dp 就是全部触摸区域,用户几乎点不中,
只能看到球却摸不到。保持窗口在屏内,触摸热区就是完整的 52dp 球体 ——
视觉上躲起来了,操作上依然好点。
顺带修复的问题
- Paint 复用污染 alpha:状态点用同一个 Paint 画描边和实心,导致其越画越透明
- 动画并发写同一份 LayoutParams:快速连点会让位置互相覆盖、球在抖。
改为单个 ValueAnimator 统一驱动「位置 + 缩放 + 透明度 + 偏移」四项,开新动画前先 cancel 旧的 - 拖动与动画互相覆盖:确认拖动后立即终止缩放动画,否则球跟不上手指
- 废弃 API:
defaultDisplay换成WindowMetrics,修正折叠屏/分屏下球定位偏移
能力边界(未改变)
悬浮球提升进程到 VISIBLE,能降低内存不足被回收的概率,
但挡不住系统的一键清理/强力清理(走白名单机制)。默认关闭。
安装包为 debug 签名版,仅供测试。