内容简介:如今越来越多的app开始添加支付功能,不论哪种支付,不可避免的步骤就是密码的输入,就算没有密码输入,验证码也是少不了的。比较low的实现方式是用一组EditText来拼,每个输入框只允许输入1个字符,通过TextWatcher来监听,输入完成后下一个输入框自动获取焦点。今天介绍一种自定义View的方式实现,优雅而不失逼格!注意事项:
如今越来越多的app开始添加支付功能,不论哪种支付,不可避免的步骤就是密码的输入,就算没有密码输入,验证码也是少不了的。比较low的实现方式是用一组EditText来拼,每个输入框只允许输入1个字符,通过TextWatcher来监听,输入完成后下一个输入框自动获取焦点。今天介绍一种自定义View的方式实现,优雅而不失逼格!
废话不多说,先上图
Github地址,如果对您有帮助,麻烦给个star,手动狗头
特性
- 仿支付宝微信风格
- 下划线风格
- 可显示明文或者密文,密文支持显示圆点,星号,或者任意字符
- 支持设置密码框之间的间隔和圆角(间隔为0时圆角只显示最左和最右的圆角)
- 支持设置边框和密码的颜色
原理
- 通过View宽度和间隔宽度计算每个密码框的宽度
- 绘制边框(区分不同的风格和间距、圆角等)
- 绘制密码圆点(不同风格有圆点、星号和明文)
注意事项:
- 绘制圆角canvas.drawRoundRect有api版本限制,所以采用path的方式来绘制
- 设置圆角、间距后需要重新计算密码框的宽度
核心代码:
@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);// 绘制密码
}
}
复制代码
使用方式
- 布局中:
<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" />
复制代码
- 设置监听器
passwordView.setInputListener(new PasswordInputView.InputListener() {
@Override
public void onInputCompleted(String text) {
// 输入完成后回调
}
});
复制代码
- 属性参考
<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>
复制代码
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- IJPay 0.5 让支付触手可及,已完成微信支付,支付宝支付
- 支付宝支付参数获取
- PHP 支付类库 PaySDK v1.0.9 新增支付宝 APP 支付
- ThinkPHP之银联支付(网页支付)
- YunGouOS 个人支付接口 2.0.5 版本发布,个人支付宝 H5、APP 支付上线
- ThinkPHP之微信支付(扫码支付)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
数据结构 Python语言描述
[美] Kenneth A. Lambert 兰伯特 / 李军 / 人民邮电出版社 / 2017-12-1 / CNY 69.00
在计算机科学中,数据结构是一门进阶性课程,概念抽象,难度较大。Python语言的语法简单,交互性强。用Python来讲解数据结构等主题,比C语言等实现起来更为容易,更为清晰。 《数据结构 Python语言描述》第1章简单介绍了Python语言的基础知识和特性。第2章到第4章对抽象数据类型、数据结构、复杂度分析、数组和线性链表结构进行了详细介绍,第5章和第6章重点介绍了面向对象设计的相关知识、......一起来看看 《数据结构 Python语言描述》 这本书的介绍吧!