我使用 Canvas.drawText()
制作了一个自定义的 View
来绘制一些 SpannableString
。
当文本包含我制作的表情符号时,我调用 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);
关于带有 SpannableString 的 Android Canvas drawText,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37770493/