[英]Load SVG file in Xamarin with SkiaSharp
從 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,包括(如果是這種情況)資產文件夾內的路徑(例如“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;
}
}
在這種情況下,文件位於資源子文件夾“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))));
}
我正在使用此代碼,效果很好。 我可以在 PCL 、 ios 或 Android 文件夾中使用 SVG 只需記住在路徑中包含程序集
var assembly = this.GetType().GetTypeInfo().Assembly;
using (var s = assembly.GetManifestResourceStream("MyAssembly.Core.Hold.svg"))
{
if (s != null)
{
svg = new SKSvg();
svg.Load(s);
using (SKPaint paint = new SKPaint())
{
canvas.DrawPicture(svg.Picture, paint);
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.