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

直接上图,



完整代码:


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


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












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值