首先是简单的静态方法实现,默认是图片显示在文字开头:
public static SpannableString getText(Context mcontext, String text, int drawId){
SpannableString spannableString = new SpannableString(" " + text);
Drawable drawable = AppCompatResources.getDrawable(mcontext,drawId);
drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
spannableString.setSpan(new CenterAlignImageSpan(drawable), 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
return spannableString;
}
其次CenterAlignImageSpan.java
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) {
try{
Drawable b = getDrawable();
Paint.FontMetricsInt fm = paint.getFontMetricsInt();
//计算y方向的位移
int transY = (y + fm.descent + y + fm.ascent) / 2 - b.getBounds().bottom / 2;
canvas.save();
//绘制图片位移一段距离
canvas.translate(x, transY);
if(b instanceof BitmapDrawable){
BitmapDrawable bt= (BitmapDrawable) b;
if (!bt.getBitmap().isRecycled()) {
b.draw(canvas);
}else{
b.draw(canvas);
}
}
canvas.restore();
}catch (Exception ignored){
}
}
}