gpt4 book ai didi

Android 字体 ttf 或 otf 字体呈现随机符号/字母

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:25:15 26 4
gpt4 key购买 nike

我有一个自定义的 View,我正在其中绘制一些文本。我正在使用 Assets 文件夹中提供的各种免费 otf/ttf 字体文件

public class ProjectView extends View {
private final Paint textPaint = new Paint(Paint.ANTI_ALIAS_FLAG);

private void init(Context context) {
textPaint.setStyle(Paint.Style.FILL);
textPaint.setAntiAlias(true);

typeface = Typeface.createFromAsset(context.getAssets(), "fonts" + File.separator + fontFileName);
textPaint.setTypeface(typeface);
}
}

除了一件事外,一切似乎都正常:我画的字随机地弄乱了,这意味着这些字母被随机替换为其他字母或符号。

这是一个例子:

enter image description here

正确的单词在左图中,但有时它会像右图中那样绘制。再次调用 invalidate() 一切都再次正确呈现解决了这个问题。

这种效果在 ListView 中更为明显,因为我在每次单击项目时调用 notifyDatasetChanged() 时频繁重绘,所以它在那里发生得更频繁。在适配器中我这样使用它:

@Override
public View getView(int position, View convertView, ViewGroup parent) {

View view = convertView;
ViewHolder holder;
if (convertView == null) {
view = inflater.inflate(R.layout.list_item_fonts, null);

holder = new ViewHolder();
holder.txtFont = (TextView) view.findViewById(R.id.txtFont);
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}

//tried this two but no success
holder.txtFont.setPaintFlags(holder.txtFont.getPaintFlags() | Paint.SUBPIXEL_TEXT_FLAG | Paint.DEV_KERN_TEXT_FLAG);
holder.txtFont.getPaint().setSubpixelText(true);

holder.txtFont.setTextSize(TypedValue.COMPLEX_UNIT_SP, fonts.get(position).getSize());

holder.txtFont.setTypeface(Typeface.createFromAsset(context.getAssets(), "fonts" + File.separator + font.getFileName()));
}

老实说,我不知道是什么原因造成的,也不知道我该如何预防。感谢您的帮助!

最佳答案

每次调用 getView 时,您都在创建字体。这是低效的,并且可能会在加载和解析字体文件时导致竞争。

取而代之的是在 Activity 中包含所有已加载字体的映射,并且每个字体只加载一次。

如果许多 Activity 和 View 使用相同的字体,我什至会尝试管理 Application 类的字体。

关于Android 字体 ttf 或 otf 字体呈现随机符号/字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24003173/

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