带有圆帽的笔划在EditText中显示为中途

问题描述 投票:0回答:1

我希望我的edittext仅包含4个字母,并且每个字母都具有白色背景,并带有小圆圈的笔触,如下图所示

enter image description here

我已经尝试创建一个customEditText并用一个圆形的笔触绘制虚线路径,但是即使我增加了笔触宽度,该笔触也只显示一半,如下图所示。

enter image description here

public class PinEntryEditText extends AppCompatEditText {

float mSpace = 24; //24 dp by default
float mCharSize = 0;
float mNumChars = 4;
private float density;
private Paint paint;
private Path path;
private PathEffect effects;

public PinEntryEditText(Context context, AttributeSet attrs,
                        int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    init(context, attrs);
}


private void init(Context context, AttributeSet attrs) {
    setBackgroundResource(0);

    float multi = context.getResources().getDisplayMetrics().density;
    mSpace = multi * mSpace; //convert to pixels for our density

    paint = new Paint();
    paint.setStyle(Paint.Style.STROKE);

    paint.setStrokeWidth(10);
    paint.setStrokeCap(Paint.Cap.ROUND);
    paint.setStrokeJoin(Paint.Join.ROUND);

    paint.setColor(context.getResources().getColor(R.color.clr_black));
    path = new Path();
    //array is ON and OFF distances in px (4px line then 2px space)
    /*Path cpath = new Path();
    cpath.addCircle(0,0,10, Path.Direction.CCW);*/

    effects = new DashPathEffect(new float[]{10,20,10,20},0);
}

@Override
protected void onDraw(Canvas canvas) {
    //super.onDraw(canvas);
    int availableWidth =
            getWidth() - getPaddingRight() - getPaddingLeft();
    if (mSpace < 0) {
        mCharSize = (availableWidth / (mNumChars * 2 - 1));
    } else {
        mCharSize =
                (availableWidth - (mSpace * (mNumChars - 1))) / mNumChars;
    }

    int startX = getPaddingLeft();
    int bottom = getHeight() - getPaddingBottom();

    for (int i=0; i< mNumChars; i++) {
        paint.setPathEffect(effects);
        path.moveTo(startX, bottom);
        path.lineTo(startX + mCharSize, bottom);
        canvas.drawPath(path, paint);

        if (mSpace < 0) {
            startX += mCharSize * 2;
        } else {
            startX += mCharSize + mSpace;
        }
    }
}
}

如何使笔画看起来完整而不是中途,或者如何在第一张图片上画点?

android android-layout android-edittext android-canvas stroke
1个回答
0
投票
请检查以下内容以寻求解决方案。

<EditText android:id="@+id/codeEditText" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:maxLength="4" android:inputType="textPassword"/>

和课堂文件

EditText edittext = (EditText)findViewById(R.id.passWordEditText); edittext.setTransformationMethod(new AsteriskPasswordTransformationMethod());

和该类的实现,

public class AsteriskPasswordTransformationMethod extends PasswordTransformationMethod { private String DOT = "\u2022"; private String BIGGER_DOT = "●"; @Override public CharSequence getTransformation(CharSequence source, View view) { return new PasswordCharSequence(source); } private class PasswordCharSequence implements CharSequence { private CharSequence mSource; public PasswordCharSequence(CharSequence source) { mSource = source; // Store char sequence } public char charAt(int index) { return '*'; // This is the important part } public int length() { return mSource.length(); // Return default } public CharSequence subSequence(int start, int end) { return mSource.subSequence(start, end); // Return default } } };

它将把您的星星转换成您需要的任何东西。

public char charAt(int index) { return '*'; // This is the important part }

您可以用项目符号字符串代替,这样显示为

private String DOT = "\u2022"; private String BIGGER_DOT = "●";

我知道可能会晚一些,但是可能会帮助其他寻找相同内容的人。
© www.soinside.com 2019 - 2024. All rights reserved.