android: lock portrait - UI composition glued to phone frame (top/bottom bars + image area absolutely fixed)
This commit is contained in:
@@ -22,7 +22,7 @@
|
||||
- 适配 **Android 16(API 36)**;用户反馈旧专业版在 Android 16 上花屏,重写根治。
|
||||
- 逆向证据:`docs/android_app/reverse_apk_features.md`(4 APP 功能总表)、
|
||||
`analysis/protocol_spec.md`(USB 协议/温度算法全逆向)。
|
||||
- 用户要求:现代 UI、横竖屏自适应、**不建立流氓文件夹**(媒体→MediaStore DCIM/MAG160C)、
|
||||
- 用户要求:现代 UI、**构图钉死竖屏框架**(竖屏锁定,见 §4.3)、**不建立流氓文件夹**(媒体→MediaStore DCIM/MAG160C)、
|
||||
无 32 位库(纯 Kotlin,无 NDK)。
|
||||
|
||||
## 2. 技术栈与工具链(已部署)
|
||||
@@ -50,13 +50,13 @@
|
||||
```
|
||||
android/app/src/main/kotlin/com/mag160c/thermal/
|
||||
├─ MainActivity.kt 启动,enableEdgeToEdge + 隐藏状态栏(沉浸)
|
||||
├─ ui/AppRoot.kt App壳:底部导航(实时/相册/分析/设置)恒在底部(横竖屏一致)
|
||||
├─ ui/AppRoot.kt App壳:底部导航(实时/相册/分析/设置)恒贴竖屏底边(Activity 竖屏锁定)
|
||||
├─ ui/UiInsets.kt 单例:底部导航高度 px(渲染器用它留白)
|
||||
├─ ui/theme/Theme.kt M3 动态取色(Android12+)
|
||||
├─ ui/live/ ★实时画面(最核心)
|
||||
│ ├─ LiveViewModel.kt 状态机/演示模式/多点测温/追踪开关/拍照/录像/inset上报
|
||||
│ ├─ LiveScreen.kt 稳定单分支布局:顶栏控制条(恒顶部,适配挖孔屏)+SurfaceView
|
||||
│ └─ LiveRenderer.kt SurfaceView 软件渲染:图像恒90°旋转(3:4竖)固定不随手机转,
|
||||
│ └─ LiveRenderer.kt SurfaceView 软件渲染:图像恒90°旋转(3:4竖)钉在竖屏框架固定区域,
|
||||
│ 文字恒屏幕水平;色标条/圆圈标记/中心温OSD
|
||||
├─ ui/gallery/ 相册页(MediaStore DCIM/MAG160C 扫描 + 内嵌JPEG缩略图 + 运行时媒体权限)
|
||||
├─ ui/analyze/ MDT 离线分析(缩放/调色板重渲染/备注回写/PDF报告)
|
||||
@@ -100,13 +100,17 @@ res/drawable/*.xml 自绘矢量图标(双弧圆等可靠几何图形
|
||||
- 帧流:EP 0x81 bulk,0x1BB1B11B 头 + 0x1C 起像素 + 尾部 shutter 于 +0x24。
|
||||
- 相机信息块 0x5BB5B55B:+0x00 pid、+0x08 序列号、+0x10 宽、+0x14 高、+0x18 fps。
|
||||
|
||||
### 4.3 实时画面渲染(本轮设计约定)
|
||||
- **图像恒旋转90°CW绘制为 3:4 竖向**,填满可用区域(顶栏下~底导航上),
|
||||
**不随手机旋转**(手机怎么转图像区域都不动)。
|
||||
### 4.3 实时画面渲染(最终约定:构图钉死竖屏框架)
|
||||
- **Activity 锁定竖屏**(manifest `screenOrientation="portrait"`):屏幕相对手机框架
|
||||
永不旋转。顶栏、热像区域、底栏的**绝对位置**永远贴着手机竖屏的物理顶边(挖孔侧)、
|
||||
中间、物理底边;手机怎么物理旋转,构图都不动(用户明确要求:屏显方向必须始终
|
||||
与热像镜头实际方向对应,横屏后显示区域跟着屏幕转是错的)。**不要改回 fullSensor。**
|
||||
- **图像恒 90°CW 绘制为 3:4 竖向**,填满可用区域(顶栏下~底导航上)。
|
||||
- **文字/图标恒屏幕水平**(可读);标记文字位置自动跟随(probeToScreen 固定 90° 映射:
|
||||
`fx=1-sy/120, fy=sx/160`)。
|
||||
- 顶栏=控制项(FFC/变倍/追踪·开/调色板/拍照/录像/调色板名),恒在顶部,`safeDrawing` 顶部inset 适配挖孔屏。
|
||||
- 底栏=导航恒在底部(横竖屏一致;**没有横屏左栏**)。
|
||||
- 顶栏=控制项(FFC/变倍/追踪·开/调色板/拍照/录像/调色板名),恒在顶部,`safeDrawing`
|
||||
顶部inset 适配挖孔屏。
|
||||
- 底栏=导航恒在底部。
|
||||
- 顶栏高度经 `onSizeChanged`→`vm.uiTopPx`;底导航高度经 `UiInsets.navPx`→`vm.uiBottomPx`,渲染器据此留白。
|
||||
- 演示模式:无设备时用真实管线+DDT渲染合成帧(热块场景),demo温度用局部线性显示映射
|
||||
(真机温度走管线数学;绝对温度标定待真机)。
|
||||
|
||||
Reference in New Issue
Block a user