2016-06-12 111 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);