其他分享
首页 > 其他分享> > Android字体ttf或otf字体呈现随机symblols /字母

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