一个优雅的仿微信支付宝密码(验证码)输入框

栏目: IOS · Android · 发布时间: 4年前

内容简介:如今越来越多的app开始添加支付功能,不论哪种支付,不可避免的步骤就是密码的输入,就算没有密码输入,验证码也是少不了的。比较low的实现方式是用一组EditText来拼,每个输入框只允许输入1个字符,通过TextWatcher来监听,输入完成后下一个输入框自动获取焦点。今天介绍一种自定义View的方式实现,优雅而不失逼格!注意事项:

如今越来越多的app开始添加支付功能,不论哪种支付,不可避免的步骤就是密码的输入,就算没有密码输入,验证码也是少不了的。比较low的实现方式是用一组EditText来拼,每个输入框只允许输入1个字符,通过TextWatcher来监听,输入完成后下一个输入框自动获取焦点。今天介绍一种自定义View的方式实现,优雅而不失逼格!

废话不多说,先上图

Github地址,如果对您有帮助,麻烦给个star,手动狗头

一个优雅的仿微信支付宝密码(验证码)输入框

特性

  • 仿支付宝微信风格
  • 下划线风格
  • 可显示明文或者密文,密文支持显示圆点,星号,或者任意字符
  • 支持设置密码框之间的间隔和圆角(间隔为0时圆角只显示最左和最右的圆角)
  • 支持设置边框和密码的颜色

原理

  1. 通过View宽度和间隔宽度计算每个密码框的宽度
  2. 绘制边框(区分不同的风格和间距、圆角等)
  3. 绘制密码圆点(不同风格有圆点、星号和明文)

注意事项:

  1. 绘制圆角canvas.drawRoundRect有api版本限制,所以采用path的方式来绘制
  2. 设置圆角、间距后需要重新计算密码框的宽度

核心代码:

@Override
    protected void onDraw(Canvas canvas) {
//        super.onDraw(canvas); // 去掉父类的绘制
        int top = getPaddingTop();
        int bottom = getHeight() - getPaddingBottom();
        int start = getPaddingLeft();
        float left;

        for (int i = 0; i < maxLength; i++) {
            left = start + (boxWidth + spacing) * i;
            rectF.set(left, top, left + boxWidth, bottom);
            drawBorder(canvas, i);// 绘制边框
            if (i >= textLength) continue;
            drawPassword(canvas, i);// 绘制密码
        }
    }
复制代码

使用方式

  1. 布局中:
<com.matthew.passwordinput.lib.PasswordInputView
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_marginTop="10dp"
        android:padding="2dp"
        android:text="123"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:pwv_pwdStyle="plaintext"
        app:pwv_radius="10dp"
        app:pwv_spacing="12dp" />
复制代码
  1. 设置监听器
passwordView.setInputListener(new PasswordInputView.InputListener() {
        @Override
        public void onInputCompleted(String text) {
            // 输入完成后回调
        }
    });
复制代码
  1. 属性参考
<declare-styleable name="PasswordInputView">
        <attr name="pwv_maxLength" format="integer" /> // 最大长度

        <attr name="pwv_borderColor" format="color" /> // 边框颜色
        <attr name="pwv_pwdColor" format="color" /> // 密码颜色

        <attr name="pwv_strokeWidth" format="dimension" /> // 边框宽度
        <attr name="pwv_radius" format="dimension" /> // 圆角半径
        <attr name="pwv_spacing" format="dimension" /> // 每个密码框之间的间距
        <attr name="pwv_asterisk" format="string" /> // 当密码风格为星号风格时,可以用任意字符替换星号,替换的字符为pwv_asterisk的第一个字符

        <attr name="pwv_borderStyle" format="enum"> // 边框风格 方框 和 下划线
            <enum name="box" value="0" />
            <enum name="line" value="1" />
        </attr>
        <attr name="pwv_pwdStyle" format="enum"> // 密码风格 圆点、星号、明文
            <enum name="circle" value="0" />
            <enum name="asterisk" value="1" />
            <enum name="plaintext" value="2" />
        </attr>
    </declare-styleable>
复制代码

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法设计与分析基础

算法设计与分析基础

Anany Levitin / 潘彦 / 清华大学出版社 / 2015-2-1 / 69.00元

作者基于丰富的教学经验,开发了一套全新的算法分类方法。该分类法站在通用问题求解策略的高度,对现有大多数算法准确分类,从而引领读者沿着一条清晰、一致、连贯的思路来探索算法设计与分析这一迷人领域。《算法设计与分析基础(第3版)》作为第3版,相对前版调整了多个章节的内容和顺序,同时增加了一些算法,并扩展了算法的应用,使得具体算法和通用算法设计技术的对应更加清晰有序;各章累计增加了70道习题,其中包括一些......一起来看看 《算法设计与分析基础》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具