SuperAPI AI 工具集

maui-graphics-drawing

编程与开发

查看项目

更新于 10-15 20:34

技能介绍

用途:指导在 .NET MAUI 中使用 Microsoft.Maui.Graphics 与 GraphicsView 进行自定义绘制,包括画布绘制操作、形状、路径、文字渲染、图像绘制与阴影等。

主要能力与要点:

  1. 常见问题修复。屏幕无绘制时,确认 GraphicsView 已设置 Drawable 且有非零的 HeightRequest/WidthRequest;形状间状态串染时用 SaveState()/RestoreState() 成对包裹;阴影残留时在绘制后调用 canvas.SetShadow(SizeF.Zero, 0, null);裁剪不重置时用 SaveState/RestoreState 包裹裁剪区域;绘制期间 UI 卡死时,避免在 Draw() 内做 I/O、网络或重计算,因为它在 UI 线程运行。
  2. 画布状态始终成对 Save/Restore。未配对的调用会导致状态泄漏到后续绘制。保存/恢复涵盖描边、填充、字体、阴影、裁剪与变换,可嵌套实现分层隔离。
  3. 触发重绘用 graphicsView.Invalidate() 排队重绘,由框架在下一帧调用 IDrawable.Draw;不要直接调用 Draw()。避免在紧凑循环中调用 Invalidate(),应批量修改状态后只失效一次。
  4. 性能建议。保持 Draw() 快速,预计算路径与数据;复用 PathF 对象并存为字段;大量相同项只计算一次尺寸;减少分配,路径不变时不要在 Draw() 内新建 PathF。
  5. 阴影与裁剪属于粘性状态。阴影影响后续所有绘制直到显式移除;裁剪会累积,只能用 RestoreState() 撤销。
  6. 先设置属性再调用绘制,绘制后再设属性不会影响已画的图形。

决策框架:简单形状/静态图形用单个 IDrawable 在 Draw() 中画;动画图形在外部更新状态并由计时器/动画调用 Invalidate();复杂分层场景用多个 SaveState/RestoreState 块或分开的 drawable;绘制元素命中测试需手动跟踪形状边界,GraphicsView 对绘制内容无内置命中测试;平台专属渲染需用 handler 或平台代码,Microsoft.Maui.Graphics 仅跨平台。

检查清单:GraphicsView 已设 Drawable 且尺寸非零;Draw() 快速、无 I/O 与重分配;每个 SaveState() 有匹配 RestoreState();阴影用后移除;裁剪包在 SaveState/RestoreState 中;属性在对应绘制调用前设置;用 Invalidate() 而非直接调 Draw()。

限制:资料未提供安装命令、版本要求、API 完整清单、收费与平台支持细节,以上暂未提供。