package com.bootstrap.view; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.drawable.Drawable; import android.text.style.ReplacementSpan; public class CenteredImageSpan extends ReplacementSpan { private final Drawable drawable; public CenteredImageSpan(final Drawable drawable) { this.drawable = drawable; drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); } @Override public int getSize(final Paint paint, final CharSequence text, final int start, final int end, final Paint.FontMetricsInt fm) { return drawable.getIntrinsicWidth(); } @Override public void draw(final Canvas canvas, final CharSequence text, final int start, final int end, final float x, final int top, final int y, final int bottom, final Paint paint) { final Paint.FontMetrics metrics = paint.getFontMetrics(); final float padding = (metrics.descent - metrics.ascent - drawable.getIntrinsicHeight()) / 2f; final float transY = bottom - drawable.getIntrinsicHeight() - padding; canvas.save(); canvas.translate(x, transY); drawable.draw(canvas); canvas.restore(); } }