Android中的笔画问题

时间:2015-06-19 14:42:03

标签: java android canvas customization android-custom-view

Intent of text with stroke 在这里你可以看到我的问题是什么,我在Android中制作了一个自定义TextView,为一些分数添加笔画。但到目前为止,我有两个分开的文本而不是一个中风...

这是我的代码:

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);
}

}

提前感谢您的帮助:)

1 个答案:

答案 0 :(得分:2)

这是因为超类中的drawText绘制的位置与您的不同。尝试使用View.setGravity(Gravity.CENTER)将内容重力设置为“居中”,这可以解决您的问题。此外,如果您在视图上使用填充,则需要在计算drawText方法的原点时将其考虑在内

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

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