从版本1.55.0开始,SkiaSharp支持读取SVG文件。该软件包已于几天前(2016年11月10日)发布,我找不到足够的文档来说明如何使用它。
需要以下软件包:SkiaSharp 1.55.0 SkiaSharp Views&Layers 1.55.0 SkiaSharp.Svg 1.55.0-beta1
第一个问题是在Xamarin.Android中加载SKSvg的最佳方法是什么?
这里有两个可能的解决方案,可以开始使用适用于我的SkiaSharp:
从Asset文件夹(或子文件夹)加载SVG:
public SKSvg LoadAnSvgFromAssets(Context ctx, string assetSvgFileLoc)
{
var assets = ctx.Assets;
var svg = new SKSvg();
using (var stream = new StreamReader(assets.Open(assetSvgFileLoc)))
{
svg.Load(stream.BaseStream);
return svg;
}
}
其中“assetSvgFileLoc”是要加载的svgFilename.svg,包括(如果是这种情况)Asset文件夹内的路径(例如“subf1 / subf2 / mysvg.svg”)。
将SVG加载为RAW资源
public SKSvg LoadAnSvgFromResources(Context ctx, string svgName))
{
var resId = ctx.Resources.GetIdentifier(svgName, "raw", ctx.PackageName);
var svg = new SKSvg();
using (var stream = ctx.Resources.OpenRawResource(resId))
{
svg.Load(stream);
return svg;
}
}
在这种情况下,文件位于Resources子文件夹“raw”内,“svgName”是我们svg的文件名,没有扩展名。
要完成接受的答案,以下是如何从URL加载SKSvg
。
SkiaSharp.Extended.Svg.SKSvg svg = new SkiaSharp.Extended.Svg.SKSvg();
using (WebClient client = new WebClient())
{
svg.Load(new MemoryStream(client.DownloadData(new Uri(ResourceUrl))));
}