Android仿支付宝支付密码输入框
作者:shineflowers 发布时间:2021-12-31 00:30:31
标签:Android,支付宝,密码,输入框
本文实例为大家分享了Android实现一个仿支付宝支付密码的输入框,主要实现如下:
PasswordView.java
package com.jackie.alipay.password;
import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Build;
import android.util.AttributeSet;
import android.widget.EditText;
import android.widget.Toast;
/**
* Created by Administrator on 2016/10/31.
*/
public class PasswordView extends EditText {
private Paint mBorderPaint; //外框画笔
private Paint mLinePaint; //线的画笔
private Paint mPasswordPaint; //密码画笔
private int mPasswordTextLength; //输入密码的长度
private int mWidth;
private int mHeight;
private static final int PASSWORD_LENGTH = 6;//密码的长度
private static final int PASSWORD_RADIUS = 15;
public PasswordView(Context context) {
this(context, null);
}
public PasswordView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public PasswordView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView();
}
private void initView() {
setFocusable(true);
mBorderPaint = new Paint();
mBorderPaint.setStrokeWidth(8);
mBorderPaint.setColor(Color.WHITE);
mBorderPaint.setStyle(Paint.Style.FILL);
mLinePaint = new Paint();
mLinePaint.setColor(Color.parseColor("#838B8B"));
mLinePaint.setStrokeWidth(4);
mPasswordPaint = new Paint();
mPasswordPaint.setColor(Color.BLACK);
mPasswordPaint.setStrokeWidth(12);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
mWidth = getMeasuredWidth();
mHeight = getMeasuredHeight();
drawRoundRect(canvas);
drawLine(canvas);
drawPassword(canvas);
}
/**
* 绘制圆角矩形背景
* @param canvas
*/
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void drawRoundRect(Canvas canvas) {
canvas.drawRoundRect(0, 0, mWidth, mHeight, 12, 12, mBorderPaint);
}
/**
* 绘制分割线
* @param canvas
*/
private void drawLine(Canvas canvas) {
for (int i = 1; i < PASSWORD_LENGTH; i++) {
float x = mWidth * i / PASSWORD_LENGTH;
canvas.drawLine(x, 12, x, mHeight - 12, mLinePaint);
}
}
/**
* 绘制密码
* @param canvas
*/
private void drawPassword(Canvas canvas) {
float cx, cy = mHeight / 2;
float half = mWidth / PASSWORD_LENGTH / 2;
for (int i = 0; i < mPasswordTextLength; i++) {
cx = mWidth * i / PASSWORD_LENGTH + half;
canvas.drawCircle(cx, cy, PASSWORD_RADIUS, mPasswordPaint);
}
}
@Override
protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {
super.onTextChanged(text, start, lengthBefore, lengthAfter);
mPasswordTextLength = text.toString().length();
if (mPasswordTextLength == PASSWORD_LENGTH) {
Toast.makeText(getContext(), "您设置的密码为: " + text, Toast.LENGTH_SHORT).show();;
}
invalidate();
}
public void reset(){
setText("");
invalidate();
}
}
效果图如下:
更多内容请参考专题:Android密码使用教程
0
投稿
猜你喜欢
- 1、完美1比1 仿照微信仿微信发动态 九宫格拖拽、删除暴力拖拽ui有点问题,不影响使用,资源文件自己找个+号2、微信发动态拖拽bug当选择完
- ViewPager是一个常用的Android组件,不过通常我们使用ViewPager的时候不能实现左右无限循环滑动,在滑到边界的时候会看到一
- 本文实例为大家分享了C#实现温度转换功能的具体代码,供大家参考,具体内容如下界面图代码using System;using System.C
- 前言镜像配置都是常规操作,必要时也可以上代理.自己搭的nexus本质也是一种镜像,可以代理maven中央仓库.各个仓库的测速,可以使用这个脚
- 1. 阐述对于Java中Map的遍历方式,很多文章都推荐使用entrySet,认为其比keySet的效率高很多。理由是:entrySet方法
- C#的FileInfo类提供了与File类相同的功能,不同的是FileInfo提供的都是成员方法,使用示例如下所示:1、读文件://创建只读
- JVM自带的类加载器:其关系如下:其中,类加载器在加载类的时候是使用了所谓的“父委托”机制。其中,除了根类加载器以外,其他的类加载器都有且只
- 1. 定义栈:线程运行时需要的内存空间,一个栈存在多个栈帧。栈具有先入后出,后入先出的特点。栈帧:每个方法运行时需要的内存(局部变量表、操作
- 类的结构包括 :1. 成员变量2. 成员方法3. 构造方法4. 代码块5. 内部类第一 构造方法的作用主要有以下三方面的作用:(1)在构造方
- 查看代码执行mybatis的sql语句File–>Settings–>Plugins 搜索 MyBatis Log Plugin
- FreeMarker 是一个采用 Java 开发的模版引擎,是一个基于模版生成文本的通用工具。 它被设计用来生成 HTML Web 页面,特
- 一、介绍本教程将介绍如何使用 mybatis-plus 工具自动给我们生成 Controller、Service、Entity、Mapper
- 需要添加对 System.Management.dll 的引用 using System.Diagnostics; using System
- Nacos 的部署,我使用的时docker 部署(单机模式 Mysql),官网文档:https://nacos.io/zh-cn/docs/
- 那么什么是性能测试,它与功能测试有什么样的区别?性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测
- 安装Free Mybatis plugin即可安装MyBatisCodeHelper插件(推荐)补充:IDEA插件(mybatis框架下ma
- 前言:回顾之前的微信公众号配置和消息处理的内容,我们已经掌握了如何配置服务器与微信公众号建立连接,也掌握了通过消息管理的方式,对用户的信息进
- 方法一:public class MainActivity extends Activity { @O
- 判断是否为飞行模式: boolean isAirplaneMode = Settings.System.getInt(mConte
- 遇到的问题!注:自定义CommentGenerator的都知道通过实现CommentGenerator接口的一些不足,毕竟只是实现了Comm