在 SpannableStringBuilder 和 DynamicLayout 中修改 Drawable

Modify Drawable inside SpannableStringBuilder and DynamicLayout

我试图在 SpannableStringBuilder 中隐藏笑脸(在 DynamicLayout 中使用)。 一开始我试过

ImageSpan[] spans = spannable.getSpans(0, length, ImageSpan.class);
spans[0].getDrawable().setAlpha(0);

没用。 我也试过了

ImageSpan[] spans = spannable.getSpans(0, length, ImageSpan.class);
spans[0].getDrawable().setVisible(false, true);

也没用。

下一个代码确实有效,但它不保留可绘制对象的大小,因此笑脸周围的文本开始 "jump",这是不正确的。

ImageSpan[] spans = spannable.getSpans(0, length, ImageSpan.class);
spannable.removeSpan(spans[0]);

可能,我可以重新绘制可绘制对象,但这是一项昂贵的操作。为什么可绘制对象不更新?我错过了什么?

提前致谢。

好的,在我的基础可绘制对象 class 中,我实现了 setAlpha 方法,我在其中更改了绘制对象。之后,我重新验证了可绘制对象所在的视图。之后我的 drawable class 中的 draw 方法被执行并且 alpha 值发生变化