Skip to content

RGBBeat v2.2.2 - 修复特效遮挡触摸

Latest

Choose a tag to compare

@wumisc wumisc released this 08 Nov 13:58

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 + testDebugUnitTest BUILD SUCCESSFUL。
  • 45 个 JVM 单元测试全部通过(EffectLayoutTest / EffectKeyModeTest / EffectPickerTest / EffectTintTest / 渲染稳定性等)。
  • 真机验证:特效播放期间桌面图标、设置页均可正常点击(v2.2.0/2.2.1 均失败,2.2.2 通过)。

安装

  1. Android 8.0+,授予悬浮窗权限;LSPosed 勾选启用并重启。
  2. 直接覆盖安装本 APK(versionCode 15 > v2.2.0 的 13)。
  3. 首页「立即预览礼物特效」验证效果;正常使用可开「音乐高潮自动播放」。

已知限制

  • 色键阈值在 EffectVideoView.FRAGMENT_SHADER(sstep(0.025, 0.14, edge) / sstep(0.05, 0.22, chroma)),不同设备观感可微调。
  • 三段 mp4 无 alpha 通道,靠着色器抠背景;纯白界面上的高光会偏淡。
  • 晕车(motion)模式没有音频输入、beatSeq 不递增,礼物特效不会自动触发(手动预览不受影响)。