文本笔划问题,Android

Issue with stroke in text, Android

在这里你可以看到我的问题是什么,我在 Android 中制作了一个自定义 TextView 来为一些乐谱添加笔划。但到目前为止,我有 2 个分开的文本,而不是一个带有笔划的文本...

这是我的代码:

XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/game_end_share_relative_main"
    android:layout_width="@dimen/share_width"
    android:layout_height="@dimen/share_height"
    android:background="#000000" >

            <com.sharing.StrokeTextView
                android:id="@+id/user_share_points"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="3"
                android:textColor="@color/primary"
                android:layout_marginRight="16dp"
                style="@style/SecondaryFontFamily"
                android:textSize="70dp" />

以及自定义 TextView:

public class StrokeTextView extends TextView {
private int mStrokeColor;
private int mStrokeWidth;
private TextPaint mStrokePaint;

public StrokeTextView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    init(attrs);
}

public StrokeTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public StrokeTextView(Context context) {
    super(context);
}

public void setStrokeColor(int color) {
    mStrokeColor = color;
}

public void setStrokeWidth(int width) {
    mStrokeWidth = width;
}

@Override
protected void onDraw(Canvas canvas) {
    if (mStrokePaint == null) {
        mStrokePaint = new TextPaint();
    }
    
    mStrokePaint.setTextSize(getTextSize());
    mStrokePaint.setTypeface(getTypeface());
    mStrokePaint.setFlags(getPaintFlags());
    
    mStrokePaint.setStyle(Paint.Style.STROKE);
    mStrokePaint.setColor(mStrokeColor);
    mStrokePaint.setStrokeJoin(Paint.Join.ROUND);
    mStrokePaint.setStrokeCap(Paint.Cap.ROUND);
    mStrokePaint.setStrokeWidth(mStrokeWidth);
    mStrokePaint.setShadowLayer(2.0f, 5.0f, 5.0f, Color.BLACK);
    
    mStrokePaint.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/MikadoBlack.otf"));
    String text = getText().toString();
    canvas.drawText(text, getWidth() - (mStrokePaint.measureText(text) / 2),  getBaseline(), mStrokePaint);
    super.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/MikadoBlack.otf"));
    super.onDraw(canvas);
}

}

提前感谢您的帮助:)

何塞

这是因为 super class 中的 drawText 绘制位置与您的位置不同。尝试使用 View.setGravity(Gravity.CENTER) 将内容引力设置为 'center' 这可能会解决您的问题。此外,如果您在视图上使用填充,那么在计算 drawText 方法的原点时需要将其考虑在内

 int hPadding = getPaddingLeft()+getPaddingRight();
 int contentAreaWidth = getWidth() - hPadding;
 canvas.drawText(text, contentAreaWidth - (mStrokePaint.measureText(text) / 2), getBaseline(), mStrokePaint);

这将有助于将描边文本与 super class 中绘制的普通文本对齐。