Android Canvas 使用 SpannableString 绘制文本
Android Canvas drawText with SpannableString
我用 Canvas.drawText()
做了一个自定义 View
来画一些 SpannableString
s。
当文本包含我制作的表情符号时,我调用 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);
我用 Canvas.drawText()
做了一个自定义 View
来画一些 SpannableString
s。
当文本包含我制作的表情符号时,我调用 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);