From 79051d8d9d7b664fcd27461b62e4339b1b4310ea Mon Sep 17 00:00:00 2001 From: RichardLuo <22096448+RichardLuo0@users.noreply.github.com> Date: Wed, 20 Apr 2022 01:15:12 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E4=BF=AE=E5=A4=8D=E8=B4=B4?= =?UTF-8?q?=E5=90=A7=E8=A1=A8=E6=83=85=E5=9B=BE=E7=89=87=E9=AB=98=E5=BA=A6?= =?UTF-8?q?=E4=B8=8E=E5=AD=97=E9=AB=98=E4=B8=8D=E4=B8=80=E8=87=B4=EF=BC=8C?= =?UTF-8?q?=E4=BB=A5=E5=8F=8A=E5=8F=AA=E6=9C=89=E8=B4=B4=E5=90=A7=E8=A1=A8?= =?UTF-8?q?=E6=83=85=E7=9A=84=E8=B4=B4=E5=AD=90=E5=BA=95=E9=83=A8=E8=A2=AB?= =?UTF-8?q?=E6=88=AA=E6=96=AD=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../post/components/spans/EmotionSpan.java | 21 ++++++++++++++++--- .../tieba/post/utils/StringUtil.java | 4 +++- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/huanchengfly/tieba/post/components/spans/EmotionSpan.java b/app/src/main/java/com/huanchengfly/tieba/post/components/spans/EmotionSpan.java index a8a496d8..e17803c2 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/components/spans/EmotionSpan.java +++ b/app/src/main/java/com/huanchengfly/tieba/post/components/spans/EmotionSpan.java @@ -8,10 +8,11 @@ import android.text.style.ImageSpan; import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; public class EmotionSpan extends ImageSpan { public static final String TAG = EmotionSpan.class.getSimpleName(); - private int size; + private final int size; public EmotionSpan(Context context, @DrawableRes int resId, int size) { super(context, resId, ALIGN_BASELINE); @@ -25,13 +26,27 @@ public class EmotionSpan extends ImageSpan { return drawable; } + @Override + public int getSize(@NonNull Paint paint, CharSequence text, int start, int end, @Nullable Paint.FontMetricsInt fm) { + if (fm != null) { + Paint.FontMetricsInt fontFm = paint.getFontMetricsInt(); + + fm.ascent = fontFm.top; + fm.descent = fontFm.bottom; + + fm.top = fm.ascent; + fm.bottom = fm.descent; + } + + return size; + } + @Override public void draw(@NonNull Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, @NonNull Paint paint) { Paint.FontMetricsInt fm = paint.getFontMetricsInt(); Drawable drawable = getDrawable(); - int transY = (y + fm.descent + y + fm.ascent) / 2 - - drawable.getBounds().bottom / 2; + int transY = y - drawable.getBounds().bottom + fm.descent; canvas.save(); canvas.translate(x, transY); drawable.draw(canvas); diff --git a/app/src/main/java/com/huanchengfly/tieba/post/utils/StringUtil.java b/app/src/main/java/com/huanchengfly/tieba/post/utils/StringUtil.java index 87848dee..b6e7754a 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/utils/StringUtil.java +++ b/app/src/main/java/com/huanchengfly/tieba/post/utils/StringUtil.java @@ -3,6 +3,7 @@ package com.huanchengfly.tieba.post.utils; import android.content.Context; import android.text.Spannable; import android.text.SpannableString; +import android.text.TextPaint; import android.text.TextUtils; import android.widget.TextView; @@ -32,7 +33,8 @@ public class StringUtil { int start = matcherEmotion.start(); int imgRes = EmotionUtil.getImgByName(emotion_map_type, key); if (imgRes != -1) { - int size = (int) tv.getTextSize(); + TextPaint paint = tv.getPaint(); + int size = Math.round(-paint.ascent() + paint.descent()); /* Bitmap bitmap = BitmapFactory.decodeResource(res, imgRes); Bitmap scaleBitmap = Bitmap.createScaledBitmap(bitmap, size, size, true);