密码输入框(默认六位 [*] [*] [*] [*] [*] [*])

2024-01-07 20:38
文章标签 密码 默认 输入框 六位

本文主要是介绍密码输入框(默认六位 [*] [*] [*] [*] [*] [*]),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

/**
* 密码输入框(默认六位 [] [] [] [] [] [])
*
* @author xiely.
* @date 17/07/19.
*/

public class PasswordEditText extends EditText {private Context mContext;/*** 密码框输入间隔*/private float mSpacingWidth;/*** 默认密码位数*/private int mMaxCharact = 6;private Bitmap mPwdImg, inputLeft, inputMiddle, inputRight, inputBox;private Paint mPaint = new Paint();public PasswordEditText(Context context) {this(context, null);}public PasswordEditText(Context context, AttributeSet attrs) {super(context, attrs);init(context);}private void init(Context context) {this.mContext = context;mSpacingWidth = DimenUtils.dpToPx(12);setBackgroundColor(Color.TRANSPARENT);setMaxCharacter(mMaxCharact);setSingleLine(true);setCursorVisible(false);setLongClickable(false);setInputType(InputType.TYPE_CLASS_NUMBER);mPwdImg = BitmapFactory.decodeResource(context.getResources(), R.drawable.ui_pw_is_set);inputLeft = BitmapFactory.decodeResource(context.getResources(), R.drawable.ui_input_left);inputMiddle = BitmapFactory.decodeResource(context.getResources(), R.drawable.ui_input_middle);inputRight = BitmapFactory.decodeResource(context.getResources(), R.drawable.ui_input_right);inputBox = BitmapFactory.decodeResource(context.getResources(), R.drawable.ui_input_box);}public void setSpacingWidth(float mSpacingLen) {this.mSpacingWidth = DimenUtils.dpToPx(mSpacingLen);}public void setMaxCharacter(int maxCharacter) {this.mMaxCharact = maxCharacter;setFilters(new InputFilter[]{new InputFilter.LengthFilter(maxCharacter)});}@Overrideprotected void onDraw(Canvas canvas) {float disWidth = getWidth();float disHeight = getHeight();int spacingCount = mMaxCharact - 1;//间隔数n-1float pwdWidth = (disWidth - mSpacingWidth * spacingCount) / 6;//密码框的宽度int textLen = getText().toString().trim().length();float cacheWidth = 0;boolean isHaveSpace = false;if (mSpacingWidth > 0) {isHaveSpace = true;}for (int i = 0; i < mMaxCharact; i++) {//绘制密码方格RectF rectRim = new RectF(cacheWidth, 0, cacheWidth + pwdWidth, disHeight);mPaint.setColor(Color.parseColor("#d3e0e3"));if (isHaveSpace) {canvas.drawBitmap(inputBox, null, rectRim, mPaint);} else {if (i == 0) {canvas.drawBitmap(inputLeft, null, rectRim, mPaint);} else if (i == mMaxCharact - 1) {canvas.drawBitmap(inputRight, null, rectRim, mPaint);} else {canvas.drawBitmap(inputMiddle, null, rectRim, mPaint);}}if (i < textLen) {mPaint.reset();canvas.drawBitmap(mPwdImg, pwdWidth / 2 - mPwdImg.getWidth() / 2 + cacheWidth,disHeight / 2 - mPwdImg.getHeight() / 2, mPaint);}cacheWidth += (pwdWidth + mSpacingWidth);}}

有什么好的想法和交流意见欢迎留言。。。

这篇关于密码输入框(默认六位 [*] [*] [*] [*] [*] [*])的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/581177

相关文章

nginx启动命令和默认配置文件的使用

《nginx启动命令和默认配置文件的使用》:本文主要介绍nginx启动命令和默认配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录常见命令nginx.conf配置文件location匹配规则图片服务器总结常见命令# 默认配置文件启动./nginx

PostgreSQL 默认隔离级别的设置

《PostgreSQL默认隔离级别的设置》PostgreSQL的默认事务隔离级别是读已提交,这是其事务处理系统的基础行为模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一 默认隔离级别概述1.1 默认设置1.2 各版本一致性二 读已提交的特性2.1 行为特征2.2

Linux中修改Apache HTTP Server(httpd)默认端口的完整指南

《Linux中修改ApacheHTTPServer(httpd)默认端口的完整指南》ApacheHTTPServer(简称httpd)是Linux系统中最常用的Web服务器之一,本文将详细介绍如何... 目录一、修改 httpd 默认端口的步骤1. 查找 httpd 配置文件路径2. 编辑配置文件3. 保存

RedisTemplate默认序列化方式显示中文乱码的解决

《RedisTemplate默认序列化方式显示中文乱码的解决》本文主要介绍了SpringDataRedis默认使用JdkSerializationRedisSerializer导致数据乱码,文中通过示... 目录1. 问题原因2. 解决方案3. 配置类示例4. 配置说明5. 使用示例6. 验证存储结果7.

C++/类与对象/默认成员函数@构造函数的用法

《C++/类与对象/默认成员函数@构造函数的用法》:本文主要介绍C++/类与对象/默认成员函数@构造函数的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录名词概念默认成员函数构造函数概念函数特征显示构造函数隐式构造函数总结名词概念默认构造函数:不用传参就可以

C++类和对象之默认成员函数的使用解读

《C++类和对象之默认成员函数的使用解读》:本文主要介绍C++类和对象之默认成员函数的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、默认成员函数有哪些二、各默认成员函数详解默认构造函数析构函数拷贝构造函数拷贝赋值运算符三、默认成员函数的注意事项总结一

conda安装GPU版pytorch默认却是cpu版本

《conda安装GPU版pytorch默认却是cpu版本》本文主要介绍了遇到Conda安装PyTorchGPU版本却默认安装CPU的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录一、问题描述二、网上解决方案罗列【此节为反面方案罗列!!!】三、发现的根本原因[独家]3.1 p

Druid连接池实现自定义数据库密码加解密功能

《Druid连接池实现自定义数据库密码加解密功能》在现代应用开发中,数据安全是至关重要的,本文将介绍如何在​​Druid​​连接池中实现自定义的数据库密码加解密功能,有需要的小伙伴可以参考一下... 目录1. 环境准备2. 密码加密算法的选择3. 自定义 ​​DruidDataSource​​ 的密码解密3

SpringBoot如何对密码等敏感信息进行脱敏处理

《SpringBoot如何对密码等敏感信息进行脱敏处理》这篇文章主要为大家详细介绍了SpringBoot对密码等敏感信息进行脱敏处理的几个常用方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录​1. 配置文件敏感信息脱敏​​2. 日志脱敏​​3. API响应脱敏​​4. 其他注意事项​​总结

JavaScript实战:智能密码生成器开发指南

本文通过JavaScript实战开发智能密码生成器,详解如何运用crypto.getRandomValues实现加密级随机密码生成,包含多字符组合、安全强度可视化、易混淆字符排除等企业级功能。学习密码强度检测算法与信息熵计算原理,获取可直接嵌入项目的完整代码,提升Web应用的安全开发能力 目录