4b 手机端「看得见远端鼠标」的实现(协议 v5 的消费端):
- RustBridge:Frame 增 cursor: Pair<Int,Int>?(可空 Pair 忠实映射 Option<(i16,i16)>,
杜绝「x 有 y 无」非法态);拆包逻辑连同字节 reader 迁到顶层 FrameCodec——
RustBridge object 带 init{loadLibrary},测试里不可达,抽成无 native 的顶层 object
才能把跨端偏移放进 JVM 单测(核过 Rust 一端≠核过 Kotlin 另一端)
- CursorMarker.mapToView:桌面坐标→视图坐标等比映射(letterbox 下线性等比,
与 RelPointer 同一套比例);null/尺寸未就绪/越界一律返回 null(不画),
绝不用 (0,0) 当缺省——那会把「无光标」和「光标在左上角」抹平成一样
- CursorOverlayView:SurfaceView 的上层兄弟视图(surface 合成在窗口之下,
同视图无法自叠加);双描边圆环+青色中心点(兼作 proof V-D1 的颜色特征码,
UI 层绘制不经 H.264,screencap 里颜色精确);volatile + postInvalidate 跨线程;
不消费触摸(覆盖整个 stage,若吃事件会同时废掉远端操作和黑边唤出)
- MainActivity:解码循环每帧喂 cursorOverlay.updateCursor(f.cursor)(放解码前,
光标是帧头字段与解码成败无关);cleanupSession 与 disconnect 两条收尾路径同改
清标记(R-5 同源,旧会话光标留着会冒充新会话)
assembleDebug BUILD SUCCESSFUL(Canvas API 编译过);JVM 60 passed。
|
||
|---|---|---|
| .. | ||
| src | ||
| build.gradle.kts | ||