2016-06-12 141 views
1

我使用Canvas.drawText()自定义了View来绘制SpannableString s。Android Canvas采用SpannableString绘制文本

当文本包含我制作的表情符号(我不喜欢默认样式的表情符号)时,我打电话给SpannableString.setSpan()。 我发现Canvas.drawText()没有画出我设定的范围,而是绘制了默认样式的表情符号。 我试图呼叫TextView.setText()通过相同的SpannableString,它的工作原理。 我想使用Canvas来绘制文字的性能(否则,新的几个TextView s滚动ListView导致性能严重问题)。如何通过Canvas绘制SpannableString

对不起,我不是母语的人。感谢您的提前!

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

+0

@pskink它仍然在某些情况下慢。我使用'drawText'和'drawBitmap'来代替。它工作,但我不知道我的解决方案是否优雅。 –

回答

1

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

事情是这样的:

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