仿微信支付宝输入支付密码

来源:互联网 发布:网络商店系统 编辑:程序博客网 时间:2024/05/01 05:37

直接上图,



完整代码:


package com.example.administrator.stablayout;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.text.InputFilter;import android.text.TextPaint;import android.util.AttributeSet;import android.widget.EditText;/** * Created by Administrator on 2017/4/22 0022. */public class WXInputPassword extends EditText {    private CharSequence text = "";    private Paint paint;    //  边框线的宽度    private int strikeWidth = 2;    //  密码个数    private int count = 6;    //  密码框正方形边长    private int size = 100;    //  实现密码半径    private int cirRadiu = 20;    //  是否显示密码    private boolean showText = false;    //  密码数字的大小    private int textSize = 70;    private TextPaint textPaint = new TextPaint();    private OnInputComplete onInputComplete;    private float textBaseY;       //   设置输入完成监听    public void setOnInputComplete(OnInputComplete onInputComplete) {        this.onInputComplete = onInputComplete;    }    public WXInputPassword(Context context) {        super(context);    }    public WXInputPassword(Context context, AttributeSet attrs) {        super(context, attrs);        init();    }    private void init() {        setBackground(null);        setPadding(0, 0, 0, 0);        setFilters(new InputFilter[]{new InputFilter.LengthFilter(count)});        paint = new Paint();        paint.setAntiAlias(true);        paint.setDither(true);        paint.setStyle(Paint.Style.STROKE);        paint.setStrokeWidth(strikeWidth);        paint.setColor(Color.BLACK);        textPaint.setAntiAlias(true);        textPaint.setColor(Color.BLACK);        textPaint.setTextAlign(Paint.Align.CENTER);        textPaint.setTextSize(textSize);        Paint.FontMetrics fontMetrics = textPaint.getFontMetrics();        float fontHeight = fontMetrics.bottom - fontMetrics.top;        textBaseY = size - (size - fontHeight) / 2 - fontMetrics.bottom;    }    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        setMeasuredDimension(size * count, size);    }    @Override    protected void onDraw(Canvas canvas) {        paint.setStyle(Paint.Style.STROKE);        canvas.drawRect(strikeWidth / 2, strikeWidth / 2, size * 6 - strikeWidth / 2, size - strikeWidth / 2, paint);        for (int i = 1; i < count; i++) {            canvas.drawLine(size * i, 1, size * i, size - 1, paint);        }        paint.setStyle(Paint.Style.FILL);        for (int i = 0; i < text.length(); i++) {            if (showText) {                canvas.drawText(text.subSequence(i, i + 1).toString(), size / 2 + size * i, textBaseY, textPaint);            } else {                canvas.drawCircle(size / 2 + i * size, size / 2, cirRadiu, paint);            }        }    }    @Override    protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {        super.onTextChanged(text, start, lengthBefore, lengthAfter);        this.text = text;        if (text.length() >= count) {            if (onInputComplete != null) {                onInputComplete.onComplete(this.text.toString());            }        }    }    //显示密码
    public void setShowText(boolean showText) {        this.showText = showText;        invalidate();    }
// 密码输入完成后回调 public interface OnInputComplete { void onComplete(String sequence); }}


代码中有注释 ,更改适合自己项目的值  ,












0 0