android文本框密码格式,android 密码输入框

1.效果如下

8f8b2048e4d4?utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=qq

306347510301723728.png

2.实现方式

继承EditText,绘制矩形边框,绘制内部5条线, 绘制中间圆点。

3.代码如下

public class MyEditTest extends AppCompatEditText {

private static final String TAG = "MyEditTest";

private int width;

private int height;

private int divideLineWStartX;

private int firstCircleW;

private int maxCount=6;

private int inputLength;

private Paint pLine;

private Paint pCircle;

private Context context;

public MyEditTest(Context context) {

this(context,null);

}

public MyEditTest(Context context, AttributeSet attrs) {

super(context, attrs);

this.context=context;

this.setBackgroundColor(Color.TRANSPARENT);//========================>>1

this.setCursorVisible(false);//========================================>>2

initPaint();

}

private void initPaint(){

pLine=new Paint();

pLine.setColor(Color.parseColor("#666666"));

pLine.setAntiAlias(true);

pLine.setStyle(Paint.Style.STROKE);

pCircle=new Paint();

pCircle.setColor(Color.parseColor("#333333"));

pCircle.setAntiAlias(true);

pCircle.setStyle(Paint.Style.FILL);

}

@Override

protected void onSizeChanged(int w, int h, int oldw, int oldh) {

super.onSizeChanged(w, h, oldw, oldh);

height=h;

width=w;

//第一条竖线 x位置

divideLineWStartX = w / maxCount;

//第一个圆x 位置

firstCircleW=divideLineWStartX/2;

}

@Override

protected void onDraw(Canvas canvas) {

// super.onDraw(canvas);=======================================>>3

drawRect(canvas);

drawLine(canvas);

drawCircle(canvas);

}

private void drawLine(Canvas canvas) {

// 通过循环画出每个分割线

for (int i = 0; i < maxCount - 1; i++) {

canvas.drawLine((i + 1) * divideLineWStartX,

0,

(i + 1) * divideLineWStartX,

height,

pLine);

}

}

private void drawCircle(Canvas canvas) {

for (int i = 0; i < inputLength; i++) {

canvas.drawCircle(firstCircleW + i * 2 * firstCircleW,

height/2,

dp2px(context,5),

pCircle);

}

}

private void drawRect(Canvas canvas) {

canvas.drawRoundRect(new RectF(0,0,width,height),dp2px(context,2),dp2px(context,2),pLine);

}

@Override

protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {

super.onTextChanged(text, start, lengthBefore, lengthAfter);

inputLength=text.length();

if (inputLength>=6){

this.setEnabled(false);

backData.onDataBack(text.toString());

}

invalidate();

}

public void setBackData(OnBackData backData) {

this.backData = backData;

}

/**

* 根据手机的分辨率从 dp 的单位 转成为 px(像素)

*/

public static int dp2px(Context context, float dpValue) {

final float scale = context.getResources().getDisplayMetrics().density;

return (int) (dpValue * scale + 0.5f);

}

private OnBackData backData;

public interface OnBackData{

/**

* 6位数字密码

* @param pwd

*/

void onDataBack(String pwd);

}

}

4.绘制矩形边框、绘制内部5竖条线倒挺容易,在绘制圆点时,需要重写“onTextChanged”方法,在里面判断输入字符的长度,根据字符的长度,绘制圆点的个数。

@Override

protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {

super.onTextChanged(text, start, lengthBefore, lengthAfter);

inputLength=text.length();

if (inputLength>=6){

this.setEnabled(false);

backData.onDataBack(text.toString());

}

invalidate();

}

5.注意“1”处,去掉edittext自带的红色背景线,“2”处去掉不断闪烁的焦点指示图标,“3”处“ super.onDraw(canvas);”如果不注释掉,会绘制原本输入的字符。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值