本文只是将洋神文章中的部分摘录出来,方便以后查看,实现图文混排setSpan不管文字比图片大还是图片比文字大都可以居中显示。
原文链接http://www.sohu.com/a/150059234_611601
实现类
public class CenterImageSpan extends ImageSpan {
public CenterImageSpan(@NonNull Context context, int resourceId) {
super(context, resourceId);
}
@Override
public void draw(@NonNull Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, @NonNull Paint paint) {
Drawable drawable = getDrawable();
canvas.save();
Paint.FontMetricsInt fm = paint.getFontMetricsInt();
// y+ascent 得到文字内容的顶部坐标,y+descent得到文字的底部坐标
// (文字顶部坐标 + 文字底部坐标) / 2 得到文字中间线的坐标
// 偏移量 = 中线位置坐标 - 图片底部位置坐标
int transY = ((y + fm.descent) + (y + fm.ascent)) / 2 - drawable.getBounds