我希望我的edittext仅包含4个字母,并且每个字母都具有白色背景,并带有小圆圈的笔触,如下图所示
我已经尝试创建一个customEditText并用一个圆形的笔触绘制虚线路径,但是即使我增加了笔触宽度,该笔触也只显示一半,如下图所示。
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;
}
}
}
}
如何使笔画看起来完整而不是中途,或者如何在第一张图片上画点?
<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 = "●";
我知道可能会晚一些,但是可能会帮助其他寻找相同内容的人。