如何使用Skia或SkiaSharp绘制富文本

7
我希望使用SkiaSharp绘制类似于iOS的Attributed Text或Xamarin.Forms的FormattedString的富文本,但我不知道如何实现。
我找到了DrawText方法,但它只适用于单色和单字体的简单文本渲染。不能混合颜色和/或字体,也没有粗体、斜体、删除线或下划线等样式。
难道我必须自己实现富文本渲染逻辑吗?
1个回答

20

这可以通过使用SKPaint类型来实现。基本上,在绘制时,您需要设置画笔的属性:

var paint = new SKPaint();
paint.StrikeThruText = true;
paint.TextSize = 24;
paint.Color = SKColors.Yellow;
paint.UnderlineText = true;
paint.Typeface = SKTypeface.FromFamilyName(
    "Arial", 
    SKFontStyleWeight.Bold, 
    SKFontStyleWidth.Normal, 
    SKFontStyleSlant.Italic);

然后你可以画:

canvas.DrawText("Fancy Text", 30, 30, paint);

希望这可以帮助到您!

对于其他效果,您可以使用SKShaderSKMaskFilter类型。这个是模糊效果:

path.MaskFilter = SKMaskFilter.CreateBlur(SKBlurStyle.Normal, 5);

编辑

经过一段时间,我们似乎真的有了一个更好的绘制文本的方式,而不仅仅是基本的下划线。我完全推荐Brad Robinson的这个库:https://github.com/toptensoftware/RichTextKit

我的意思是,就看那美丽的东西!

RichTextKit


2
SKPaint.UnderlineText已经不存在了,有替代方法吗? - Michael Rumpler
这是一个可以为您的目的进行移植的示例。如果您不需要“花哨”的效果,只需在下面/穿过绘制线条即可。 - Tyler Southard
Skia的API每个月都会有变化。我非常钦佩那些能够使用这个库并愿意从源代码中学习它的人。 - Kyriet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接