Repository navigation
RGBBeat v2.2.2 — 修复「特效一出来就点不动」
⚠️ 本 APK 为 debug 签名(工程未配置 release keystore)。若你安装的是官方 release 签名版本,需先卸载再安装。如果你还停在 v2.2.0:那个版本有严重问题(特效播放时整机触摸失效),请务必升级。
本次修复(v2.2.0 → v2.2.2)
1. 触摸失效:换了整个渲染层
- v2.2.0 事故:
EffectGlSurfaceView用了setZOrderOnTop(true),把 Surface 提升为窗口之外的独立顶层并铺满全屏,部分 ROM 把它当全局输入层 → 整机点不动,只能灭屏/重启。 - v2.2.1:去掉
setZOrderOnTop后,「整机卡死」变成「能切后台,但桌面和 App 仍点不了」——因为GLSurfaceView底层是SurfaceView,它在窗口里仍然会创建独立图层,某些 ROM 把它当作遮挡层挡住下层应用的触摸(系统窗口如状态栏、手势导航不受影响)。窗口自身的FLAG_NOT_TOUCHABLE对这种图层无效。 - v2.2.2(本版):删除
EffectGlSurfaceView,改为EffectVideoView extends TextureView+ 自建 EGL:
MediaPlayer → SurfaceTexture(OES) → EGL 上下文 → 同一套抠背景/染色着色器 → 直接画进 TextureView 的 BufferQueue。
TextureView是普通 View,随窗口一起合成,不产生任何独立图层,从根本上不可能遮挡触摸。
2. 播放状态机加固
- 新增 6 秒 prepare 看门狗:解码器迟迟不回调
onPrepared/onError时强制复位,避免playing永久为 true 导致特效再也不触发。 - 新增 播放时长兜底硬停(
duration + 1.5s):即使onCompletion不回调,特效层也一定会被清掉,不会滞留遮挡。 lastHighlightTrigger初值改为-COOLDOWN,修复开机 12 秒内第一拍被冷却吞掉。
v2.2.0 起已包含的礼物特效改造(本版一并保留)
- 自适应抠背景:片元着色器按「局部对比度 + 彩度」判断前景,平滑的黑/白/灰/渐变底一律变全透明,线条、粒子、星点、彩色流光保留;上下边缘 8% 羽化,消除视频矩形硬边。
- 等比居中:
EffectLayout.fit()按素材原始宽高比 FIT_CENTER,横屏素材(1568×720 / 992×720 / 896×528)完整呈现、不裁切、不拉伸。 - 统一染色:
EffectTint,默认白里粉#FFB7D8(亮部收白芯、中间调透粉),另有心形粉/玫瑰紫/极光青/深海蓝/鎏金橙/荧光绿/中国红/素材原色。 - 可调选项:「背景抠除模式」自动 / 纯黑底 / 浅色·白底 / 不抠(排查用),切换后立即重绘,播放中也生效。
- 素材兼容:三段 mp4 由 HEVC(hvc1)、moov 在文件尾,转为 H.264 Main / yuv420p / moov 前置 / 无音轨,兼容 Android 8.0+ 硬解。
- 其他修复:
TextureView GONE拿不到 Surface、stop()重置轮播索引导致只播第一段、设置页写<包名>_preferences与服务读rgbbeat不通、震动忽略用户开关等。
验证
- JDK 21 + Gradle 8.14 + Android SDK 35:
assembleDebug+testDebugUnitTestBUILD SUCCESSFUL。 - 45 个 JVM 单元测试全部通过(
EffectLayoutTest/EffectKeyModeTest/EffectPickerTest/EffectTintTest/ 渲染稳定性等)。 - 真机验证:特效播放期间桌面图标、设置页均可正常点击(v2.2.0/2.2.1 均失败,2.2.2 通过)。
安装
- Android 8.0+,授予悬浮窗权限;LSPosed 勾选启用并重启。
- 直接覆盖安装本 APK(versionCode 15 > v2.2.0 的 13)。
- 首页「立即预览礼物特效」验证效果;正常使用可开「音乐高潮自动播放」。
已知限制
- 色键阈值在
EffectVideoView.FRAGMENT_SHADER(sstep(0.025, 0.14, edge)/sstep(0.05, 0.22, chroma)),不同设备观感可微调。 - 三段 mp4 无 alpha 通道,靠着色器抠背景;纯白界面上的高光会偏淡。
- 晕车(motion)模式没有音频输入、
beatSeq不递增,礼物特效不会自动触发(手动预览不受影响)。