Android Canvas 使用 SpannableString 绘制文本

Android Canvas drawText with SpannableString

我用 Canvas.drawText() 做了一个自定义 View 来画一些 SpannableStrings。

当文本包含我制作的表情符号时,我调用 SpannableString.setSpan()(我不喜欢默认样式的表情符号)。 我发现 Canvas.drawText() 不绘制我设置的跨度,而是绘制默认样式的表情符号。 我试图通过相同的 SpannableString 调用 TextView.setText() 并且它有效。 我想使用 Canvas 来绘制文本以提高性能(否则,在 ListView 中滚动时更新几个 TextView 会导致严重的性能问题)。如何用 Canvas 绘制 SpannableString

抱歉我的英语不好,我不是母语人士。感谢您的提前!

编辑:实际上我做了这个自定义 View 是为了显示文本转换的动画。多个文本将水平穿过屏幕。我遇到的问题是 TextView 的 draw 方法导致时间过多并且动画看起来很糟糕。所以想直接用Canvas绘制文字。可悲的是,我切换到 StaticLayout 仍然发现动画不稳定。

您可以尝试将 Spannable 添加到 StaticLayout 并将其绘制到 Canvas

像这样:

StaticLayout layout = new StaticLayout(yourSpannable, yourPaint,
        yourCanvas.getWidth(), Alignment.ALIGN_NORMAL, 1, 0, false);
layout.draw(yourCanvas);