Skip to content

About

中文口播提词浮层 · KTV 读字线 · 逐字变蓝 · 可调半屏 · Android 5.0+

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Android 提词器 · 中文增强版

一块压在所有应用上面的半屏提词浮层,给中文口播用。竖屏、短句、逐字变蓝,念到哪儿一眼就知道。

本项目是 Djeylani/android-teleprompter 的中文重写分支, 基于原作者 2025 年发布的 v1.3.2,按照中文口播场景重做了交互与渲染。 原项目采用 MIT 协议,本分支同样采用 MIT,见 LICENSE。


下载

最新安装包在 Releases 里,android-teleprompter-vX.Y.Z-signed.apk,直接装。

  • 最低 Android 5.0(API 21),编译与测试基于 Android 14(API 34)
  • 首次启动需要「显示在其他应用上层」权限,用于把文字浮在相机、剪映、微信之上
  • 不需要相机权限 —— 本版不再自动启动相机(原因见下方「与原版的差异」)

怎么用

  1. 把稿子粘进首页的文案框(支持粘贴/清空,不落盘,关掉就没了)
  2. 调四个参数:速度、字号、窗口高度、起始留白
  3. 点「开始」,授权悬浮窗,文字层出现在上半屏
  4. 打开你要录的相机或任何应用,正常录
  5. 点一下文字区 → 暂停;再点一下 → 继续;按住上下拖 → 手动滚

参数说明

参数 范围 含义
速度 1–40 格 每格 = 10 像素/秒,即 10–400 px/s。格数与真实值同时显示
字号 4–30 格 每格 = 4 号,即 16–120 sp
窗口高度 20–90% 浮层占屏幕高度的比例,只铺上半屏,下半屏留给你看别的
起始留白 0–80% 第一句话距离浮层顶部多远,50% 即从正中开始
读字线 10–90% 那条蓝色横线的高度。它以上已经念过的字会变蓝

速度和字号支持长按连发:按住不放会连续走格,越走越快,两三秒推到最大。想精确到个位数,点数字框直接输入。

页面右侧可存预设:当前四个参数一键存成「横屏近景」之类的名字,下次点一下回来。

读字线的原理

浮层里那条蓝线是固定的,文字往上匀速滚。文字越过线的那一刻,就从白变蓝,一行读完再从下一行行首开始一个字一个字亮过去(不是整行一刀切)。

渲染没有用 TextView + Span —— 那样每过一行都要重排整篇,两千字就会卡。这里的做法是:

  1. 用 StaticLayout 把整篇排一次,缓存在内存里;
  2. 每帧只画窗口里看得见的二十来行,白字铺一遍;
  3. 再把「已读范围」用蓝字画一遍,靠裁剪把边界切在字缝上。

所以是零重排,三千字和三百字一样流畅。

与原版的差异

原版是一个「录视频时看稿」的英文通用工具。这一版是按中文口播(竖屏、短句、对着镜头说话)重做的,改动集中在三块:

原版 v1.3.2 本版
语言 英文 简体中文,全界面
界面 可滚动、参数用滑杆 一屏放下、参数用「格 + 数字框」,可存预设
计时 固定速度滑杆 速度/字号按格 ×10、×4 换算,长按连发
读字提示 无 KTV 式蓝色读字线 + 逐字变蓝
文案存储 自动保存多份稿子 不落盘,每次现贴(含粘贴/清空按钮)
相机 启动时自动拉起相机 移除 —— 系统相机录完要手动点确认,容易丢片
浮层高度 固定约 1/3 屏 可调 20–90%,默认半屏
渲染 ScrollView + TextView 自绘 StaticLayout(修掉超过一屏就被截断的 bug)
权限 含 CAMERA 只保留悬浮窗、前台服务、通知

原版的英文 README 保留在 README.en.md。

从源码构建

需要 JDK 11 和 Android SDK(compileSdk 34)。

git clone <this-repo>
cd android-teleprompter
./gradlew :app:assembleRelease

产物在 app/build/outputs/apk/release/app-release.apk。

签名用 keystore.properties(storeFile / storePassword / keyAlias / keyPassword),该文件与 *.jks 都已加入 .gitignore,不会进仓库。没有这个文件也能构建,此时 release 会退回 debug 签名,装得上但无法覆盖升级已有安装。

提示:gradle-wrapper.jar 已随仓库提供。如果你拿到的是缺少该文件的副本,./gradlew 会静默失败而不报错,用本机的 gradle 命令代替即可。

已知限制

  • 前台服务用的是 dataSync 类型。若 targetSdk 升到 35,会撞上系统的「6 小时后台限制」,届时需要改成 mediaPlayback 或 specialUse。
  • 包名仍是 com.example.*,Google Play 不接受这个前缀,上架前需要改。
  • 只在少数几台国产 Android 机上验证过悬浮窗表现,其他机型欢迎反馈。

协议

MIT,见 LICENSE。原项目版权归 Shariif(GitHub @Djeylani)所有,中文分支的修改版权归 XinMatrix。

原作者在 README 里声明了 MIT,但上游仓库没有附许可正文,本仓库补上了标准 MIT 文本,并保留原作者的版权行。 如果你要把它用在商业产品里,建议同时知会原作者一声。

致谢

  • 原作者 @Djeylani,最初的悬浮窗与相机叠加思路来自他
  • 参数化的思路来自 TeleprompterPAD 一类专业提词器

About

中文口播提词浮层 · KTV 读字线 · 逐字变蓝 · 可调半屏 · Android 5.0+

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages