瀏覽代碼

修改直播间消息里面主讲人文本样式不正确的问题

Pq 1 年之前
父節點
當前提交
f6db98d46a

+ 2 - 1
BaseLibrary/src/main/java/com/cooleshow/base/utils/UiUtils.java

@@ -21,6 +21,7 @@ import android.view.ViewGroup;
 import com.cooleshow.base.R;
 import com.cooleshow.base.common.BaseApplication;
 import com.cooleshow.base.widgets.span.QMUIAlignMiddleImageSpan;
+import com.rui.common_base.widget.span.CenterImageSpan;
 
 import java.math.BigDecimal;
 import java.text.ParseException;
@@ -166,7 +167,7 @@ public class UiUtils {
             if (iconDrawable != null) {
                 iconDrawable.setBounds(0, 0, iconDrawable.getIntrinsicWidth(), iconDrawable.getIntrinsicHeight());
             }
-            ImageSpan alignMiddleImageSpan = new QMUIAlignMiddleImageSpan(iconDrawable, QMUIAlignMiddleImageSpan.ALIGN_MIDDLE, 4);
+            ImageSpan alignMiddleImageSpan = new CenterImageSpan(iconDrawable, ImageSpan.ALIGN_BOTTOM, 4);
             result.setSpan(alignMiddleImageSpan, 0, icon.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
             result.setSpan(new ForegroundColorSpan(firstColor), icon.length(), icon.length() + bigSizeStr.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
             result.setSpan(new ForegroundColorSpan(lastColor), icon.length() + bigSizeStr.length(), result.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

+ 63 - 0
BaseLibrary/src/main/java/com/cooleshow/base/widgets/span/CenterImageSpan.java

@@ -0,0 +1,63 @@
+package com.rui.common_base.widget.span;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.Rect;
+import android.graphics.drawable.Drawable;
+import android.text.style.ImageSpan;
+
+import androidx.annotation.NonNull;
+
+/**
+ * Author by pq, Date on 2023/10/20.
+ */
+public class CenterImageSpan extends ImageSpan {
+
+    /**
+     * 规定这个Span占几个字的宽度
+     */
+    private float mFontWidthMultiple = -1f;
+
+    public CenterImageSpan(@NonNull Drawable drawable, int verticalAlignment, int fontWidthMultiple) {
+        super(drawable, verticalAlignment);
+        this.mFontWidthMultiple = fontWidthMultiple;
+    }
+
+    public CenterImageSpan(@NonNull Context context, @NonNull Bitmap bitmap) {
+        super(context, bitmap);
+    }
+
+    @Override
+    public int getSize(Paint paint, CharSequence text, int start, int end, Paint.FontMetricsInt fm) {
+        Drawable drawable = getDrawable();
+        Rect rect = drawable.getBounds();
+        if (fm != null) {
+            Paint.FontMetricsInt fmPaint = paint.getFontMetricsInt();
+            int fontHeight = fmPaint.bottom - fmPaint.top;
+            int drHeight = rect.bottom - rect.top;
+            int centerY = fmPaint.top + fontHeight / 2;
+            fm.ascent = centerY - drHeight / 2;
+            fm.descent = centerY + drHeight / 2;
+            fm.top = fm.ascent;
+            fm.bottom = fm.descent;
+        }
+        int result = rect.right;
+        if (mFontWidthMultiple > 0) {
+            result = (int) (paint.measureText("子") * mFontWidthMultiple);
+        }
+        return result;
+    }
+
+    @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();
+    }
+}

+ 1 - 0
tclive/src/main/res/layout/tc_item_live_room_message_text.xml

@@ -16,6 +16,7 @@
         android:layout_marginStart="10dp"
         android:layout_marginEnd="10dp"
         android:id="@+id/tv_text"
+        android:lineSpacingExtra="3dp"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:includeFontPadding="false"