Last active
February 8, 2023 11:51
-
-
Save brucetoo/22bead28bfb20d5ebabba54f39ea767e to your computer and use it in GitHub Desktop.
垂直居中的imageSpan
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import android.graphics.Canvas; | |
import android.graphics.Paint; | |
import android.graphics.Rect; | |
import android.graphics.drawable.Drawable; | |
import android.text.style.ImageSpan; | |
/** | |
* 垂直居中的ImageSpan | |
* | |
*/ | |
public class VerticalImageSpan extends ImageSpan { | |
public VerticalImageSpan(Drawable drawable) { | |
super(drawable); | |
} | |
public int getSize(Paint paint, CharSequence text, int start, int end, Paint.FontMetricsInt fontMetricsInt) { | |
Drawable drawable = getDrawable(); | |
Rect rect = drawable.getBounds(); | |
if (fontMetricsInt != null) { | |
Paint.FontMetricsInt fmPaint = paint.getFontMetricsInt(); | |
int fontHeight = fmPaint.bottom - fmPaint.top; | |
int drHeight = rect.bottom - rect.top; | |
int top = drHeight / 2 - fontHeight / 4; | |
int bottom = drHeight / 2 + fontHeight / 4; | |
fontMetricsInt.ascent = -bottom; | |
fontMetricsInt.top = -bottom; | |
fontMetricsInt.bottom = top; | |
fontMetricsInt.descent = top; | |
} | |
return rect.right; | |
} | |
@Override | |
public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint) { | |
Drawable drawable = getDrawable(); | |
canvas.save(); | |
int transY = 0; | |
transY = ((bottom - top) - drawable.getBounds().bottom) / 2 + top; | |
canvas.translate(x, transY); | |
drawable.draw(canvas); | |
canvas.restore(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment