带有 SpannableString 的 Android Canvas drawText

标签 android canvas spannablestring

我使用 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/

相关文章:

java - 将标签添加到 ClickableSpan

android - spannablestring 不适用于以编程方式创建的按钮

android - 无法解析 com.facebook.react :react-native:0. 32.0

java - 线程在android中是如何工作的

javascript - Canvas 内容作为高分辨率图像。

java - 如何比较两个 EditText 字符串然后在 Android 中突出显示不同之处?

android - 设置 AlarmManager 的最佳时机/位置

java - 方法 setView 已弃用

javascript - 根据内容动态调整 Canvas 大小

android - 将 ListView 添加到 Canvas