Android仿支付宝支付密码输入框
作者:shineflowers 时间:2021-12-31 00:30:31
本文实例为大家分享了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密码使用教程
标签:Android,支付宝,密码,输入框
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
java通过Idea远程一键部署springboot到Docker详解
2022-03-26 09:31:27
![](https://img.aspxhome.com/file/2023/9/81369_0s.jpg)
使用spring注入枚举类型作为参数
2023-11-23 13:25:57
C#中Span相关的性能优化建议
2021-07-05 15:42:26
![](https://img.aspxhome.com/file/2023/7/69817_0s.png)
java并发编程专题(八)----(JUC)实例讲解CountDownLatch
2021-12-19 16:43:22
Java之JFrame输出Helloworld实例
2022-01-19 16:40:52
![](https://img.aspxhome.com/file/2023/5/71185_0s.png)
Unity3D使用右键菜单打开工程
2023-07-18 05:08:46
![](https://img.aspxhome.com/file/2023/8/104358_0s.png)
C#多线程之线程同步WaitHandle
2022-08-10 10:16:12
![](https://img.aspxhome.com/file/2023/3/94623_0s.jpg)
详解Spring中bean的几种注入方式
2023-02-12 20:25:07
Android完美实现平滑过渡的ViewPager广告条
2023-10-01 13:05:31
![](https://img.aspxhome.com/file/2023/2/87272_0s.jpg)
mybatis <foreach>标签动态增删改查方式
2022-07-27 20:03:16
springcloud项目占用内存好几个G导致服务器崩溃的问题
2023-03-30 09:54:25
![](https://img.aspxhome.com/file/2023/6/61236_0s.png)
Effective Java (异常处理)
2022-09-24 12:17:29
Java 关键字 速查表介绍
2022-07-03 22:04:48
Java中的权限修饰符(protected)示例详解
2023-04-16 10:23:24
![](https://img.aspxhome.com/file/2023/5/132085_0s.png)
SpringBoot配置Email发送功能实例
2022-03-07 20:52:20
![](https://img.aspxhome.com/file/2023/3/61943_0s.jpg)
C#编程自学之数据类型和变量一
2023-07-30 02:45:49
![](https://img.aspxhome.com/file/2023/6/67056_0s.jpg)
浅谈Springboot之于Spring的优势
2022-01-08 02:35:29
Android开发之BottomSheetDialog组件的使用
2021-12-02 19:01:27
![](https://img.aspxhome.com/file/2023/6/126696_0s.gif)
Java使用二分法进行查找和排序的示例
2023-03-16 10:16:37
java 对象参数去空格方式代码实例
2023-11-27 09:49:34