public class CenterAlignImageSpan extends ImageSpan {
public CenterAlignImageSpan(Drawable drawable) {
super(drawable);
}
@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 b = getDrawable();
Paint.FontMetricsInt fm = paint.getFontMetricsInt();
int transY = (y + fm.descent + y + fm.ascent) / 2 - b.getBounds().bottom / 2;//计算y方向的位移
canvas.save();
canvas.translate(x, transY);//绘制图片位移一段距离
b.draw(canvas);
canvas.restore();
}
}
3、写个帮助类,协调各类
public class LabelTextViewHelper{
private TextView textView;
private final float textSize;
private final float leftPadding;
private final float rightPadding;
private final float borderWidth;
private final float round;
private final float labelLeftRightPadding;
private final float labelTopBottomPadding;
public LabelTextViewHelper(@NonNull TextView textView) {
this.textView = textView;
DisplayMetrics displayMetrics = textView.getResources().getDisplayMetrics();
textSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 13, displayMetrics);
leftPadding = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1, displayMetrics);
rightPadding = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8, displayMetrics);
borderWidth = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1, displayMetrics);
round = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 2, displayMetrics);
labelLeftRightPadding = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 6, displayMetrics);
labelTopBottomPadding = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4, displayMetrics);
}
public void setLabelAndText(@NonNull String label, @NonNull String text){
SpannableString sp = new SpannableString(label + text);
//获取一张图片
LabelDrawable drawable = new LabelDrawable("TextView", label, textSize);
drawable.setLeftPadding(leftPadding);
drawable.setRightPadding(rightPadding);
drawable.setLabelLeftRightPadding(labelLeftRightPadding);
drawable.setLabelTopBottomPadding(labelTopBottomPadding);
drawable.setBorderWidth(borderWidth);
drawable.setRound(round);
drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
//居中对齐imageSpan
ImageSpan imageSpan = new CenterAlignImageSpan(drawable);
sp.setSpan(imageSpan, 0, label.length(), ImageSpan.ALIGN_BASELINE);
textView.setText(sp);
}
}