一、图层绘制的若干细节
本文结合实例说明 Rosen 图层绘制的若干细节,以点带面,若全面了解需要深入阅读 MSDP 和 Graphic2D 子系统相关代码。
1.1. 绘制动画的数据来源
由 ARKUI 调用 MSDP 的 StartDrag()接口将 DragData 数据信息初始化到 DrawingInfo 全局变量。
1.2. 从设备 DPI 转换图片偏移位置
获取设备的 dpi,通过 deviceDpi 计算出缩放因子 scalingValue
int32_t deviceDpi = display->GetDpi();
将 pixelMap 的 Width 和 Height,通过 scalingValue,裁剪尺寸。
scalingValue=(1.0*deviceDpi*DEVICE_INDEPENDENT_PIXEL / BASELINE_DENSITY) / SVG_ORIGINAL_SIZE;
竖直方向增加一个 adjustSize 偏移量
adjustSize = TWELVE_SIZE * GetScaling();
SetBounds(DEFAULT_POSITION_X,adjustSize,pixelMap->GetWidth(),pixelMap->GetHeight());
SetFrame(DEFAULT_POSITION_X,adjustSize,pixelMap->GetWidth(),pixelMap->GetHeight());
1.3 图层与绘制节点
1.3.1. 绘制多图层的基本步骤
- 创建窗口节点 surfaceNode,设置背景颜色、大小、是否可见等信息;
- 创建根节点 rootNode,设置边框长宽大小、背景颜色等信息;
- 初始化画布;
- 再分别创建 nodes、filterNode、pixelMapNode、dragStyleNode、mouseIconNode 节点,设置相对应的节点参数信息。
1.3.2. nodes 节点存放节点信息
| 各节点 | 对应的下标常量 | 描述 |
|---|---|---|
| Rosen::RSCanvasNode filterNode |

最低0.47元/天 解锁文章
877

被折叠的 条评论
为什么被折叠?



