10 Commits

Author SHA1 Message Date
meyou
987b965956
MiniMonth 纯 Canvas 绘制:消除 96 个 Text 组件的测量开销
trace 显示 TextStringSimpleNode::measure 累计 100+ms,是 measure 阶段
主要开销。MiniMonth 中 12 个标题 Text + 84 个星期标签 Text = 96 个
Text 组件。

修复:
1. YearGridView 中预计算 titleLayouts + weekdayLayouts
2. MiniMonth 改为单个 Canvas 统一绘制标题 + 星期行 + 日期
3. 消除所有 Text 组件,TextStringSimpleNode::measure 归零
2026-05-18 23:29:05 +08:00
xfy
a4bd56a8a9 优化月→年视图切换性能(第二轮):延迟预组合 + 缓存提升
- 年视图 beyondViewportPageCount 动画完成后再恢复为 1,消除切换后 283ms onMeasure 阻塞
- MiniMonth 主题色提取到 YearGridView 级别 remember 缓存(72 次 → 1 次读取)
- TextMeasurer 从每 MiniMonth 独立实例改为 YearGridView 共享(12 个 → 1 个)
- 预测量 1-31 × 3 颜色的 TextLayoutResult(93 个缓存),消除 360+ 次 measure() 调用
- 12 个月的 generateMiniMonthDays 在 YearGridView 级别预计算并缓存
2026-05-18 17:05:43 +08:00
xfy
914e882fe1 优化月→年视图切换性能:Canvas 扁平化 + 首帧组合 + 动画交错
- MiniMonth 日期网格改 Canvas 绘制,单页 Composable 从 ~600 降到 ~120
- 年视图 beyondViewportPageCount 首帧 0、首帧后恢复 1,避免一次组合 36 个 MiniMonth
- toggleYearView 先启动动画再翻转 isYearView,月视图缩小与年视图组合交错
- 添加 ComposeTrace 跨平台 trace 工具用于性能分析

MonthView→YearView 总耗时 1732ms → 1033ms (↓40%),首帧 onMeasure 902ms → 129ms (↓86%)
2026-05-18 16:50:13 +08:00
xfy
72b591ab49 整理 import 排序和缩进格式
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 14:16:44 +08:00
xfy
7250d08fb7 年视图标题固定 + 交叉淡入淡出 + 移除 fadeIn/fadeOut
年视图标题行从 HorizontalPager 内移到外部,左右滑动时标题不随 pager 滚动。
年份切换时标题文字用垂直滑动动画(与 MonthHeader 一致,移除 fadeIn/fadeOut)。
月/年视图左右滑动改为交叉淡入淡出,修复原实现中间全白的问题。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 14:14:46 +08:00
xfy
bad536617d 年视图网格: 改用 spacedBy 统一行列间距,月份顶部对齐
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 10:49:38 +08:00
xfy
d9326668a4 年视图布局优化: 月份填满视图、加大字号、添加间距
- 4行用 weight(1f) 等分网格区域高度,月份均匀撑高填满视图
- 纵向 Arrangement 从 SpaceEvenly 改为 Top,去掉首行前/末行后大间隙
- 横向 Arrangement 从 SpaceEvenly 改为 SpaceBetween
- 第1行上方加 8dp padding,第4行下方加 8dp padding
- 月份之间横向加 8dp 间距(col0 end=4dp + col2 start=4dp)
- 月份标题字号 9→10sp,星期行 6→8sp,日期数字 6→8sp
- 日期行高 9→12sp,日期行之间加 padding(vertical=2.dp)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 10:42:56 +08:00
meyou
142d0c235a 修复年视图布局和动画问题
- 年视图每个小月历添加星期行头部
- 日期列用 weight(1f) 对齐,去掉 CircleShape 裁剪
- 取消前一个动画 Job 防止快速点击时动画丢失
2026-05-16 16:49:10 +08:00
meyou
c996d026cc Replace year view month cells with mini calendar grids
Each month in the 4x3 year grid now shows a compact calendar with
day numbers, matching the iOS Calendar year view style. Today is
highlighted with a filled circle. Selected month title uses primary color.
2026-05-16 16:35:56 +08:00
meyou
995693cb5d Add year view with Hero Zoom transition
- CalendarViewModel: add isYearView, yearViewProgress, yearViewYear state
  with toggleYearView(), selectMonthFromYearView(), year navigation methods
- YearGridView: new 4x3 month grid with year navigation header
- MonthHeader: onClick now toggles year view, added "今天" button
- CalendarMonthView: overlay year view with graphicsLayer anchor-based
  scale transition, hide BottomCard during year view
2026-05-16 16:29:17 +08:00