SVG 即可缩放矢量图形(Scalable Vector Graphics),它是一种基于 XML 语法的二维矢量图形格式,由万维网联盟(W3C)制定。
SVG 使用 XML 文本格式来描述图形,与传统的位图图像(如 JPEG、PNG 等)不同,SVG 图形是由一系列的点、线、形状和颜色定义组成的,而不是像素点。这使得 SVG 图形具有无限的可扩展性,无论放大或缩小多少倍,图形都能保持清晰、不失真。
SVG 代码示例,用于绘制一个黄色的圆形:
<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg">
<circle cx="50" cy="50" r="40" fill="yellow" />
</svg>
首先将 SVG 文件放置在项目的 entry/src/main/resources/base/media 目录下。
@Entry
@Component
struct SvgIconExample {
build() {
Column({ space: 50 }) {
// 假设 svg 文件名为 icon.svg
Image($r('media.icon'))
.width(100)
.height(100)
}
.width('100%')
.padding({ top: 50 })
}
}
$r 是资源引用函数,media.icon 表示引用 media 目录下名为 icon 的资源文件。这里会加载 entry/src/main/resources/base/media 目录下的 icon.svg 文件。
关于SVG文件内容字符串,如何加载显示的方案如下:
可以使用三方库ohos-svg,https://gitcode.com/openharmony-sig/ohos_svg
//Index
import { SVGImageView } from '@ohos/svg'
@Entry
@Component
struct Index {
svgStr: string =
"<svg id=\"vector\" xmlns=\"http://www.w3.org/2000/svg\" width=\"28\" height=\"28\" viewBox=\"0 0 28 28\"><defs><linearGradient gradientUnits=\"userSpaceOnUse\" x1=\"6.935\" y1=\"3.252\" x2=\"6.909\" y2=\"10.552\" id=\"gradient_0\"><stop offset=\"0\" stop-color=\"#FFFE4144\"/><stop offset=\"1\" stop-color=\"#FFFF6D67\"/></linearGradient></defs><path fill=\"url(#gradient_0)\" d=\"M10.983,3.951C10.983,3.313 10.461,2.79 9.823,2.79C5.983,2.79 2.862,5.913 2.862,9.755C2.862,10.393 3.384,10.915 4.022,10.915C4.66,10.915 5.182,10.393 5.182,9.755C5.182,7.189 7.259,5.112 9.823,5.112C10.461,5.112 10.983,4.589 10.983,3.951Z\" stroke-width=\"1\" fill-rule=\"evenodd\" stroke=\"#00000000\" id=\"path_6\"/></svg>"
model: SVGImageView.SVGImageViewModel = new SVGImageView.SVGImageViewModel();
aboutToAppear(): void {
this.model.setFromString(this.svgStr)
}
build() {
Column() {
SVGImageView({ model: this.model })
.width(50)
.height(100)
}
.height('100%')
.width('100%')
}
}
以下是一个将本地加载 SVG 和网络加载 SVG :
@Entry
@Component
struct SvgLoadingExample {
build() {
Column({ space: 50 })
.width('100%')
.padding({ top: 50 })
.alignItems(FlexAlign.Center) {
// 本地加载 SVG
Text('本地加载 SVG')
.fontSize(20)
.fontWeight(FontWeight.Bold)
// 假设本地 SVG 文件名为 local_icon.svg
Image($r('media.local_icon'))
.width(100)
.height(100)
// 网络加载 SVG
Text('网络加载 SVG')
.fontSize(20)
.fontWeight(FontWeight.Bold)
Image('https://upload.wikimedia.org/wikipedia/commons/thumb/4/4f/SVG_Logo.svg/1200px-SVG_Logo.svg.png')
.width(100)
.height(100)
}
}
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。