SVG_22_marker标签定义标识_如箭头

知识点:

marker标签中,有以下几个主要属性

  • refx属性为x轴的偏移量,即箭头与线的偏移,0表示接触;

当refx为0时:

当refx为12时:

一对比,效果立马明白了吧。


 

  • refy属性为Y轴的偏移量,一般设置为图形的一半,这样指示出来的比较顺眼;

当refy为marker控件Y轴一半时:

当refy为0时:

  • markerWidth、markerHeight目前来看控制marker的大小;

markerWidth和markerHeight可分别控制marker大小

当markerWidth或markerHeight为6时:(为了显示更清晰,换了红色)

当markerWidth或markerHeight为2时:

 

PS:这里对这两个属性有一个未知:从0到6是依次变大的,但再往后变大数值,图形不变了,估计是受我现在的认知,以后待提升优化。

 

  • orient属性表示线的方向,一般设置为auto,表示跟随线的方向。

当设置为orient=“auto”时:

当不设置orient属性时,会展示原来的坐标位置,导致很难看:

 


 

marker可以做出各种图形,五角星、圆形、无规则图形,因为marker使用的是path标签绘制的,所以只要path能绘制出来,marker就能应用起来。所以理论上可以绘制任意图形。

 

marker不止可以应用path,还可以引用rect、circle等等各种图形标签。

 

我试了polyline标签,通过

marker-end="url(#Triangle)"引用在defs标签里面定义的marker

说到这里,引用时,其实有多个标签

 

当使用marker-end引用时:会在末端引用

当使用marker-mid引用时:会在各个中间结点都会引用

当使用marker-start引用时:会在其实端点引用

 


 

我又试了使用circle引用了marker,没有效果,猜测是找不到开始点、结束点。

 

好了,今天就这些。marker用法,走起。

 

Xi说孔方兄认证

在使用 LVGL 库处理 SVG 图像时,若需要调整 SVG 的视口(viewport)大小以适应显示区域,可以利用 `lv_svg_render_get_viewport_size` 函数来获取 SVG 的推荐视口尺寸,并根据实际显示需求进行调整。 该函数原型如下: ```c lv_result_t lv_svg_render_get_viewport_size(lv_svg_handle_t * handle, lv_coord_t * w, lv_coord_t * h); ``` 此函数会返回 SVG 文件中建议的视口宽度和高度,通常基于 SVG 的 viewBox 属性。开发者可以使用这些值作为参考,来设置 SVG 图像在 LVGL 界面中实际显示的尺寸。例如: ```c lv_coord_t svg_w = 0; lv_coord_t svg_h = 0; lv_svg_render_get_viewport_size(svg_handle, &svg_w, &svg_h); ``` 在获取到 SVG 的原始视口尺寸后,可以根据目标显示区域的大小进行缩放。例如,若希望 SVG 图像自适应一个固定大小的容器(如 200x200 像素),可以将 `svg_w` 和 `svg_h` 设置为该固定值,以实现视口适配: ```c svg_w = 200; svg_h = 200; lv_svg_render_set_viewport_size(svg_handle, svg_w, svg_h); ``` 此外,若需要保持 SVG 图像的宽高比并填充整个显示区域,可以使用 `lv_svg_render_set_align` 函数配合 `LV_SVG_ALIGN_CENTER` 等对齐方式,使 SVG 图像在指定区域内居中显示并自动缩放[^1]。 ### 注意事项 - 在调用 `lv_svg_render_set_viewport_size` 前,确保已正确初始化 SVG 渲染器并加载 SVG 数据。 - 如果 SVG 文件中未定义 viewBox,则默认视口尺寸可能为 0,此时需要手动指定视口大小。 - 为了确保 SVG 图像在不同分辨率或容器大小下良好显示,建议结合 `lv_svg_render_set_align` 和 `lv_svg_render_set_viewport_size` 进行动态适配。 ### 示例代码 ```c lv_svg_handle_t * svg_handle = lv_svg_create_from_file("path/to/image.svg"); lv_coord_t svg_w = 0; lv_coord_t svg_h = 0; lv_svg_render_get_viewport_size(svg_handle, &svg_w, &svg_h); // 假设目标显示区域为 200x200 svg_w = 200; svg_h = 200; lv_svg_render_set_viewport_size(svg_handle, svg_w, svg_h); lv_svg_render_set_align(svg_handle, LV_SVG_ALIGN_CENTER, LV_SVG_FILL_METHOD_ZOOM); // 将 SVG 图像添加到 LVGL 界面中 lv_obj_t * img = lv_img_create(lv_scr_act()); lv_img_set_src(img, svg_handle); ``` 通过上述方法,可以灵活地调整 SVG 视口大小,使其适应不同的显示区域,并保持良好的图像比例和清晰度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

King·Forward

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值