Android里面通常使用SpannableString或SpannableStringBuilder来拼接图片与文字,可以将其放到一个TextView控件里面来显示。如果使用过弹幕功能,通常也会使用图文混排的方式去绘制弹幕。
其中会使用ImageSpan来拼接图片,但是系统默认的ImageSpan能力非常弱,默认无法居中对齐,也无法设置图片与文字的间距,所以我们通常需要自定义ImageSpan,来解决上述问题。这里封装了一个工具类CenterSpaceImageSpan来解决这些问题。
一、自定义效果对比
二、自定义ImageSpan
核心逻辑在于getSize的实现,需要加上左右边距,以及绘制时Canvas translate相应的距离
/**
* 垂直居中ImageSpan,支持margin间距设置
* <p>
*
* @author yinxuming
* @date 2020/4/2
*/
public class CenterSpaceImageSpan extends ImageSpan {
private final int mMarginLeft;
private final int mMarginRight;
public CenterSpaceImageSpan(Drawable drawable) {
this(drawable, 0, 0);
}
public CenterSpaceImageSpan(Drawable drawable,