Skip to content

Repository files navigation

android-duo

开合之间

随折叠角度流动的光影,为 Android 大折叠手机而作。

Angle-aware frosted transitions and hinge diagnostics for Android foldables.

下载测试版 · 适配说明 · 隐私说明 · 反馈机型

内屏预览 外屏预览 角度检测
内屏预览 外屏拉伸与磨砂示意 模拟器真实角度事件

界面截图由开发测试流程生成,动画预览使用内置示意桌面。

合拢时黑区逐渐变宽,展开时按同一路径收回:

155° 95° 60°
155度黑边 95度黑边 60度黑边

android-duo 将真实开合角度转化为磨砂、柔和拉伸与渐变黑边,支持内屏和外屏。仅在原始角度大于 5° 且小于 175° 时显示;≤5° 和 ≥175° 均不显示。 独立的检测页可以确认手机实际开放的铰链传感器能力。

动画视觉参考 iPhone Duo 官方展开演示,通过 Android 公开接口独立实现。

当前版本 0.3.1,需要 Android 12 / API 31 或更新版本。优先面向 HONOR Magic V5,尚未完成该机型真机验证。无需 Root,其他机型按实际传感器与显示能力适配。

可以做什么

  • 恢复柔和拉伸:沿用 0.2.0 的拉伸关系,内屏合拢时黑边从活动半屏的外侧逐渐加宽,默认从左侧增长;展开时逐渐收窄。
  • 对应的外屏效果:外屏使用整块活动面板,方向与内屏镜像对应;打开时逐渐磨砂,合拢时逐渐清晰。支持左右方向和强度调整。
  • 更稳定的角度跟随:0.3° 小幅抖动过滤与自适应平滑只用于动画,检测读数和触发边界仍使用原始角度。
  • 减少局部旧画面残留:固定半屏直接显示底层应用;清晰与模糊画面统一合成,低磨砂强度不再让底层原画面透出。窗口或内容布局变化后丢弃旧快照,稳定后重新取图,仍在有效角度区间时无需额外转动 3°。
  • 临时抑制系统动画:Android 13+ 可在展开期间临时降低全局动画倍率,结束后恢复。只影响遵循系统倍率的动效,不能保证关闭荣耀桌面的专有图标动画。
  • 独立检测与预览:显示真实读数、最近 10 秒采样曲线、运动方向与本次范围;支持复制诊断、手动拖动、自动播放和“预览外屏效果”。检测不需要无障碍服务。

安装与开始

从 v0.3.1 发布页 下载 android-duo-0.3.1-debug.apk。这是调试签名测试包,应用包名仍为 dev.nemoyu.duofold。

  1. 打开“检测开合角度”,慢速展开、停住,再合拢,确认读数随实际动作变化。显示一位小数不代表传感器具有 0.1° 精度。
  2. 返回首页,拖动滑块或“播放展开动画”,调整强度、左右方向,也可打开“预览外屏效果”。
  3. 如需桌面和其他应用上的效果,打开“在手机上启用”,阅读说明,再前往系统设置启用 android-duo 展开动画 无障碍服务。
  4. 按需设置“展开时暂时抑制系统动画”;Android 13+ 默认开启此选项,总动画开关仍默认关闭。
  5. Magic V5 可在系统设置中搜索“应用启动管理”,允许 android-duo 后台活动,再测试内外屏与应用切换。具体入口取决于 MagicOS 版本。

没有真实角度时暂停系统效果,手动预览仍可用。 0.3.0 移除了展开角度校准与无角度的定时切屏动画,避免改变原始角度边界。关闭应用中的动画开关即可停用。

效果与使用边界

系统效果使用可触摸穿透的覆盖层,活动区域使用当前画面的短期快照,固定半屏保持底层画面可见。悬停约 1.3 秒后淡出,单次显示最长约 8 秒;快照中的视频等内容不会逐帧更新。切换应用或收到内容布局变化事件后重新取图,锁屏、熄屏、禁止截图或截图失败时跳过。不同应用的窗口事件与合成行为仍需实测。

外屏需由系统点亮,且角度仍满足 5° < 角度 < 175°。如果系统在刚打开一点时就关闭外屏,应用无法继续在已关闭的屏幕上显示;若只在接近完全闭合时点亮外屏,也不会在保护区内补播。公开的保持亮屏接口不能覆盖折叠时的内外屏切换策略,应用不强制点亮外屏。具体接口边界见 适配说明。

“展开时暂时抑制系统动画”使用 Android 公开 API。仅在三项原倍率相同且可读取时临时设为 0;停止展开约 700 毫秒、合拢或停用时恢复,连续抑制最长 8 秒。≥175° 立即退出自定义画面,但延续已开始的系统抑制以覆盖桌面切换末段;端点抖动不会单独启动抑制。用户或其他应用改过倍率时保留新值。若进程被强制结束,倍率可能保持 0,直到无障碍服务重新连接并恢复;详细机制见 适配说明。

隐私

应用没有联网权限,不读取控件文字,不执行自动点击。屏幕快照与检测数据只在本机内存中处理;偏好设置和临时修改前的动画倍率恢复记录保存在应用私有空间。诊断仅在主动复制时进入剪贴板,不自动发送。完整隐私说明

从源码构建

准备 JDK 17 或兼容的更高版本、Android SDK Platform 36,并设置 JAVA_HOME。通过 ANDROID_HOME 或未提交的 local.properties 中的 sdk.dir 指定 SDK 路径。

git clone https://github.com/Nemoyuzx/android-duo.git
cd android-duo
./gradlew assembleDebug testDebugUnitTest lintDebug

APK 输出为 app/build/outputs/apk/debug/app-debug.apk。连接已授权 USB 调试的设备后,可用 ./gradlew installDebug 安装。角度集成测试需要能提供真实铰链事件的折叠设备或模拟器:

adb emu sensor set hinge-angle0 95
./gradlew connectedDebugAndroidTest -Pandroid.testInstrumentationRunnerArguments.expectedAngle=95

GitHub Actions 构建、运行单元测试与 Lint;Actions 的临时调试签名可能与本地不同,日常安装请使用 Releases 中的 APK。项目采用 Kotlin 与 Android 原生视图,预览和系统覆盖层共用 Canvas / RenderNode / RenderEffect 渲染。

实际测试范围见 验证记录。模拟器结果不能代替 Magic V5 的传感器、显示切换和后台行为验收。欢迎提交 机型兼容性反馈。

About

Android fold animations and live hinge-angle detection. 面向大折叠手机的开合动画与真实角度检测。

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages