gpt4 book ai didi

android - 如何从 Assets 文件夹中获取字体文件的路径以及如何使用该路径在 xamarin android 中设置 SKTypeface?

转载 作者:行者123 更新时间:2023-11-29 16:50:41 29 4
gpt4 key购买 nike

我在原生 xamarin andorid 中工作。我在设置自定义字体时遇到问题。我正在使用“SkiaSharp”插件生成 Canvas View 。该插件位于 PCL 中,因此可以在 android 和 ios 中使用。

我的“ Assets ”文件夹中有一个 .ttf 文件。

我使用以下代码生成字体路径。

string path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
string FontPath = System.IO.Path.Combine(path, "Myfile.ttf");

这个路径我发送给 PCL 来设置 "SKTypeface"

paint.Typeface = SKTypeface.FromFile(FontPath, 0);

如果是"Typeface" 那么我可以使用下面的方法

Typeface tf = Typeface.CreateFromAsset(Assets, "Myfile.ttf");

我总是得到 null SKTypeface 作为返回值。

我认为找不到字体路径。

bool flag=File.Exist(FontPath)

它总是返回空值。

如何在 xamarin andorid 中获取 Assets 文件夹的路径?如何将自定义字体设置为 SKTypeface?

最佳答案

您通常不使用 android Assets 的路径,因为它们位于应用程序包内。相反,你得到一个流并加载它——但是 Assets 流是不可搜索的,所以必须先复制它们:

SKTypeface typeface;
using (var asset = Assets.Open("Fonts/CONSOLA.TTF"))
{
var fontStream = new MemoryStream();
asset.CopyTo(fontStream);
fontStream.Flush();
fontStream.Position = 0;
typeface = SKTypeface.FromStream(fontStream);
}

...
paint.Typeface = typeface;

我还想指出,这是相对“慢”的,所以您可能想这样做一次,然后重新使用字体。避免直接在绘制方法中加载文件,因为绘制发生在 UI 线程上并且会阻塞。

加载 Assets 时,请勿包含根“ Assets ”文件夹,因为这是假定的。

编辑

在新的 v1.59.2 版本中,现有的 FromStream 方法将按预期工作,与流无关。

关于android - 如何从 Assets 文件夹中获取字体文件的路径以及如何使用该路径在 xamarin android 中设置 SKTypeface?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46538300/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com