Android字体ttf或otf字体呈现随机symblols /字母
作者:互联网
我有一个自定义视图,我正在绘制一些文本.我正在使用资产文件夹中提供的各种免费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);
}
}
一切似乎工作得很好,除了一件事:我正在绘制的单词随机乱搞,意味着字母随机替换为其他字母或符号.
这是一个例子:
正确的单词位于左侧图像中,但有时会像右图中一样绘制.再次调用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时都会创建字体.这是低效的,并且可能在加载和解析字体文件时引起竞争.
而是在活动中具有所有加载的字体的映射,并且仅加载每个字体.
如果许多活动和视图使用相同的字体,我甚至会尝试管理Application类上的字体.
标签:android,fonts,android-custom-view,text-rendering,android-typeface 来源: https://codeday.me/bug/20190629/1321576.html