06 · 速查卡与排障索引
救火从这篇进。行号基于 MiCarSupport @ dev 52a51649(micarx 3.2.8),老版本分支
(3.2.5/RC11 等)行号有漂移,按符号名 grep。
1. 三十秒决策树
flowchart TD
Q["现象?"] --> A["点轨道跳了值/被取整"]
Q --> B["点轨道没反应(GT)"]
Q --> C["拖动不跟手/脱钩"]
Q --> D["thumb 视觉错位"]
Q --> E["按压动画异常"]
Q --> F["值没保存/回调口径不对"]
A --> A1["取整不在组件库!<br/>去 Settings 层查 mProgressChangeTimes<br/>能量回收 KB 02 篇"]
A --> A2["组件库侧只有 stepSize 吸附<br/>BaseSlider:2335-2342"]
B --> B1["by design: GT/Ultra 点击抑制<br/>03 篇 §3(ignoreClick 重锚定)"]
C --> C1["ignoreClick 的 mOffset 只在 DOWN 算<br/>手势中途程序 setValue 会瞬移<br/>03 篇 §3.5-1"]
C --> C2["滚动容器内 DOWN 被延迟<br/>看 setScrollDragEnable :3199"]
D --> D1["触摸坐标系带 padding 补偿<br/>绘制坐标系不带 + trackRadius 清零 sidePadding<br/>03 篇 §4"]
D --> D2["GT 轨道中心=(h+hintH)/2 非 view 中心<br/>04 篇 §2 几何钩子"]
E --> E1["IconSlider/IconSeekBar 抑制了基类动画<br/>查自研双组动画 04 篇"]
E --> E2["量程非 0~100 时 GT 边缘特判失效<br/>04 篇 §2 applyPressOffsets"]
F --> F1["组件库 SliderPreference 只恢复不落盘<br/>05 篇 §2"]
F --> F2["SeekBarPreferenceCompat 回调不含 min 偏移<br/>05 篇 §3"]
2. 关键符号 → 行号速查
BaseSlider(MAT/BaseSlider.java)
| 符号 | 行 | 用途 |
|---|
onTouchEvent | 2172 | 手势唯一入口(无 dispatchTouchEvent) |
ignoreClick | 268 / 595 / 666-672 / 2177 | GT 点击抑制标志 |
transformTouchEvent / computeTouchOffset | 2304 / 2314 | 事件重锚定 |
generateTouchPosition | 2287 | x→归一化 touchPosition |
snapPosition | 2335 | 组件库唯一吸附(stepSize 档位) |
snapThumbToValue | 2413 | 改值唯一路径,THRESHOLD=1e-4(:244) |
dispatchOnChangedFromUser / Programmatically | 2651 / 2642 | fromUser=true/false |
onStartTrackingTouch / onStopTrackingTouch | 2661 / 2668 | touch 回调 |
pickActiveThumb | 2349 | 选 thumb(非 hit test) |
scaledTouchSlop | 470 | 系统 slop /2 |
trackOffsetY | 256 | GT 按压轨道增厚(px) |
setTrackRadius 清零 sidePadding | 647-660(清零 :659) | 坐标系错位线索 |
| thumb 绘制中心(无 padding 补偿) | 2130 | 坐标系错位线索 |
setScrollDragEnable | 3199 | 滚动容器内强制可拖 |
setPressEnlarge | 3203 | GT/Ultra 被 delegate 拦截(:3205) |
mSeekBarLocation | 326 | 死字段 |
mThumbWdithScale 拼写 | IconSlider:104 / IconSeekBar:107 | Width→Wdith,grep 注意 |
Slider(MAT/Slider.java)
| 符号 | 行 | 用途 |
|---|
pickActiveThumb override | 139-147 | 单 thumb 恒选 0 |
startCustomAnim/reverseCustomAnim | 149-165 | GT/Ultra 走 SliderAnimation |
SliderAnimation | 173-228 | trackOffsetY 0→2dp + thumb 高×2,225ms |
shouldDrawCompatHalo | 168-171 | 恒 false,不画 halo |
IconSlider / IconSeekBar(ABW)
| 符号 | 行 | 用途 |
|---|
| IconSlider.onTouchEvent | 566-598 | 强制 setIgnoreClick(:570-572)+ 按压动画分流 |
| IconSlider.startCustomAnim 恒 true | 340-347 | 抑制基类动画 |
| IconSlider onLayout setThumbPadding(w/2) | 289 | 触摸映射内缩半 thumb |
| IconSeekBar.onTouchEvent | 592-623 | shouldTransformTouchEvent(:596)+ 按压动画 |
| IconSeekBar startPressAnim 双触发 | 608 + AppCompatSeekBar:225 | DOWN 执行两遍,幂等但冗余 |
| IconSeekBar checkValue(max≠min) | 212-216 | IAE 硬约束 |
| applyPressOffsets 写死 0/100 | IconSlider:39-41, GT delegate:158-167 | 非 0~100 量程边缘特判失效 |
delegate 点击抑制返回值
| delegate | Normal | GT | Ultra |
|---|
| IconSliderThemeDelegate.shouldIgnoreClick | false(:109) | true(:152) | true(:153) |
| SeekBarThemeDelegate.shouldTransformTouchEvent | false(:123) | true(:157) | true(:157) |
3. 已知坑清单
- IconSeekBar DOWN 双触发 startPressAnim(子类 :608 + 父类 :225),GT 动画重建两次。
- applyPressOffsets 边缘判定写死 0/100 量程,非 0~100 恒走中间档。
- 组件库 SliderPreference 只恢复不落盘(setValueInternal 无 persistInt)。
- SeekBarPreferenceCompat 回调不含 min 偏移,显示口径含 min。
- mOffset 手势期间不刷新,程序 setValue 打断拖动会瞬移。
- mThumbWdithScale 拼写错误,两个文件同步存在。
- tap 会成对触发 start/stop tracking(UP 补发 :2248),下游勿把 start 当”开始拖动”。
- 程序 setValue 不做 step 吸附也不校验,非法值延迟到 onDraw 抛 ISE(:741-752)。
- IconSlider/IconSeekBar 与 BaseSlider 坐标系差异(03 篇 §4)是 GT 视觉错位的候选根因。
- 取整(整十吸附)不在组件库——别再 grep alignAdjustProgress,在 Settings 层
settingsBaseUi SliderPreference。
4. 版本与分支速查
- dev 是唯一开发主线(01 篇);版本节奏:3.2.5(07-20)→3.2.6(08-14)→3.2.7(09-23)→
3.2.8(2026-10-21,
gradle.properties version-first-number=3.2 second=8)。
- GT 竖条 thumb 资源:
material/src/main/res/drawable/micar_appcompat_slider_thumb_bg_gt.xml
(6dp×32dp);mThumbPaddingGT=8dp(dimens.xml:30)。
- 热修线:hotfix-3.2.0 / hotfix-3.2.2 / rls-xcd-u-mp-26-v5.0-hotfix-10327(3.1.16)。
5. 互链
- 能量回收知识库——取整机制(Settings 层)、
N801PROB-132401 三轮修复史、GT 错位调查(08 篇)。
- N801PROB-144519:限速滑块平行实现漏网(05 篇 §5 教训)。