Android自定义弹窗模仿微信,android自定义仿微信、支付宝 密码输入框
效果图:
截图.png
直接上代码:
/**
* Description: 密码 输入框
* Created by zouyulong on 2017/7/31.
*/
public class CustomPasswordInputView extends EditText {
private Context mContext;
/**
* 第一个密码实心圆的圆心坐标
*/
private float mFirstCircleX;
private float mFirstCircleY;
/**
* 当前输入的个数
*/
private int mCurInputCount = 0;
/**
* 实心圆的半径
*/
private int mCircleRadius = dip2px(getContext(), 5);
/**
* view的宽高
*/
private int mHeight;
private int mWidth;
/**
* 最大输入位数
*/
private int mMaxCount = 6;
/**
* 圆的颜色 默认BLACK
*/
private int mCircleColor = Color.BLACK;
/**
* 边线的颜色
*/
private int mStrokeColor = Color.BLACK;
/**
* 分割线的颜色
*/
private int mDevideLineColor = Color.BLACK;
/**
* 描边的画笔
*/
private Paint mStrokePaint;
/**
* 分割线开始的坐标x
*/
private int mDivideLineWStartX;
/**
* 分割线的宽度
*/
private int mDivideLineWidth = dip2px(getContext(), 0.5f);
/**
* 描边的矩形
*/
private RectF mFrameRectF = new RectF();
/**
* 矩形边框的圆角
*/
private int mRectAngle = 0;
/**
* 竖直分割线的画笔
*/
private Paint mDivideLinePaint;
/**
* 圆的画笔
*/
private Paint mCirclePaint;
/**
* 密码输入完成事件
*/
private OnPasswordCompleteListener mCompleteListener;
public CustomPasswordInputView(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
getAtt(attrs);
initPaint();
this.setCursorVisible(false);
this.setFilters(new InputFilter[]{new InputFilter.LengthFilter(mMaxCount)});
}
private void getAtt(AttributeSet attrs) {
TypedArray typedArray = mContext.obtainStyledAttributes(attrs, R.styleable.CustomPasswordInputView);
mMaxCount = typedArray.getInt(R.styleable.CustomPasswordInputView_maxCount, mMaxCount);
mCircleColor = typedArray.getColor(R.styleable.CustomPasswordInputView_pwdcircleColor, mCircleColor);
mCircleRadius = typedArray.getDimensionPixelOffset(R.styleable.CustomPasswordInputView_pwdCircleRadius, mCircleRadius);
mStrokeColor = typedArray.getColor(R.styleable.CustomPasswordInputView_strokeColor, mStrokeColor);
mDevideLineColor = typedArray.getColor(R.styleable.CustomPasswordInputView_devideLineColor, mDevideLineColor);
mDivideLineWidth = typedArray.getDimensionPixelSize(R.styleable.CustomPasswordInputView_divideLineWidth, mDivideLineWidth);
mRectAngle = typedArray.getDimensionPixelOffset(R.styleable.CustomPasswordInputView_rectAngle, mRectAngle);
typedArray.recycle();
}
/**
* 初始化画笔
*/
private void initPaint() {
mCirclePaint = getPaint(dip2px(getContext(), 5), Paint.Style.FILL, mCircleColor);
mStrokePaint = getPaint(dip2px(getContext(), 0.5f), Paint.Style.STROKE, mStrokeColor);
mDivideLinePaint = getPaint(mDivideLineWidth, Paint.Style.FILL, mStrokeColor);
}
/**
* 设置画笔
*
* @param strokeWidth 画笔宽度
* @param style 画笔风格
* @param color 画笔颜色
* @return
*/
private Paint getPaint(int strokeWidth, Paint.Style style, int color) {
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setStrokeWidth(strokeWidth);
paint.setStyle(style);
paint.setColor(color);
paint.setAntiAlias(true);
return paint;
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
mHeight = h;
mWidth = w;
mDivideLineWStartX = w / mMaxCount;
mFirstCircleX = w / mMaxCount / 2;
mFirstCircleY = h / 2;
mFrameRectF.set(0, 0, mWidth, mHeight);
}
@Override
protected void onDraw(Canvas canvas) {
//不删除的画会默认绘制输入的文字
// super.onDraw(canvas);
drawWeChatBorder(canvas);
drawPsdCircle(canvas);
}
/**
* 画微信支付密码的样式
*
* @param canvas
*/
private void drawWeChatBorder(Canvas canvas) {
canvas.drawRoundRect(mFrameRectF, mRectAngle, mRectAngle, mStrokePaint);
for (int i = 0; i < mMaxCount - 1; i++) {
canvas.drawLine((i + 1) * mDivideLineWStartX,
0,
(i + 1) * mDivideLineWStartX,
mHeight,
mDivideLinePaint);
}
}
/**
* 画密码实心圆
*
* @param canvas
*/
private void drawPsdCircle(Canvas canvas) {
for (int i = 0; i < mCurInputCount; i++) {
canvas.drawCircle(mFirstCircleX + i * 2 * mFirstCircleX,
mFirstCircleY,
mCircleRadius,
mCirclePaint);
}
}
@Override
protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {
super.onTextChanged(text, start, lengthBefore, lengthAfter);
mCurInputCount = text.toString().length();
if (mCurInputCount == mMaxCount && mCompleteListener !=null) {
mCompleteListener.onComplete(getPasswordString());
}
invalidate();
}
@Override
protected void onSelectionChanged(int selStart, int selEnd) {
super.onSelectionChanged(selStart, selEnd);
//保证光标始终在最后
if (selStart == selEnd) {
setSelection(getText().length());
}
}
/**
* 获取输入的密码
*
* @return
*/
public String getPasswordString() {
return getText().toString().trim();
}
/**
* 密码输入完成回调
*/
public interface OnPasswordCompleteListener {
void onComplete(String password);
}
public void setOnCompleteListener(OnPasswordCompleteListener mListener) {
this.mCompleteListener = mListener;
}
/**
* dp转px 自定义事件注意使用dp为单位
* @param var0
* @param var1
* @return
*/
public static int dip2px(Context var0, float var1) {
float var2 = var0.getResources().getDisplayMetrics().density;
return (int)(var1 * var2 + 0.5F);
}
}
就不做讲解了,每一行代码都做了详细的注解,代码已经上传到了github上面。
github地址:
Android自定义弹窗模仿微信,android自定义仿微信、支付宝 密码输入框相关推荐
- android仿微信充值布局,仿微信充值金额输入框-自定义EditText
1. 概述 在开发过程中,有时候我们需要在输入框中输入金额,并且输入金额有一定的规则限制: 1>:只能是数字: 2>:第一位只能是数字,不能是小数点,如果第一位是小数点,就默认在小数点前加 ...
- 【Android视图效果】共享元素实现仿微信查看大图效果
在之前的文章中,我们通过动画实现了这个,具体可以查看[Android 动画]动画详解之仿微信查看大图效果(四),这里,我们用过度动画来实现. 什么是共享元素? 它是Android 5.0新加入的一种过 ...
- android微信运动页面开发,微信小程序仿微信运动步数排行(交互)
微信小程序仿微信运动步数排行(交互) 发布时间:2020-08-20 00:51:02 来源:脚本之家 阅读:101 作者:祈澈姑娘 本文介绍了微信小程序仿微信运动步数排行(交互),分享给大家,也给自 ...
- 微信小程序仿微信SlideView组件slide-view
微信小程序仿微信SlideView组件. 使用 1.安装 slide-view 从小程序基础库版本 2.2.1 或以上.及开发者工具 1.02.1808300 或以上开始,小程序支持使用 npm 安装 ...
- Java微信运动步数排序设计_微信小程序仿微信运动步数排行(交互)
本文介绍了微信小程序仿微信运动步数排行(交互),分享给大家,也给自己留个笔记,废话不多说了,具体如下: 效果图如下: wxml: {{item.name}} {{item.steps}} wxss: ...
- Android自定义弹窗模仿微信,Android 仿微信朋友圈点赞和评论弹出框功能
本文简单模仿微信朋友圈的点赞和评论弹出框,布局等细节请忽略,着重实现弹出框.发评论,及弹出位置的控制. 1. 微信弹出框 微信朋友圈的点赞和评论功能,有2个组成部分: 点击左下角的"更多&q ...
- Android自定义弹窗模仿微信,Android仿微信右上角点击加号弹出PopupWindow
本文实例为大家分享了Android仿微信右上角点击加号弹出展示的具体代码,供大家参考,具体内容如下 一.要弹出的布局,随便设计 android:layout_width="match_par ...
- Android自定义弹窗模仿微信,Android仿微信、qq点击右上角加号弹出操作框
Android仿微信.qq点击右上角加号弹出操作框,先上图,类似于下图这种,点击加号,会弹出一个对话框,如下图: 微信: 自己实现: 接下来,我们来实现此功能: 其实,实现原理就是,点击"+ ...
- android 自定义view,字母排序(仿微信好友列表)
一:简言 一个月没有写博客了,公司项目比较忙,最近发现公司用到一个知识点,所以抽时间通过博客的形式分享给大家,该知识点,模仿微信的好友列表,通过字母索引进行定位,该功能主要通过几个知识点实现.下面会一 ...
- Android 平板中 自定义键盘(popuwindow) 居于屏幕左下方 仿微信的密码输入界面
之前博客中,介绍过使用谷歌提供的键盘的一些api,可以很好地自定义键盘,参考我之前的博客链接:android 自定义键盘 ,这个有一个局限性,只能占满屏幕,无法做到只能占一部分的需求键盘,如下图我平板 ...
最新文章
- C++ string字符串的比较是否相等
- 新概念英语(1-73)The way to King Street
- linux shell 文件 第一行插入字符串
- Python startswith() 方法
- ios点击大头针气泡不弹出_百度地图使用(二)自定义大头针和弹出气泡
- 静脉阻塞指标+补充笔记
- java 同步原语_你所不知道的有关Java 和Scala中的同步问题
- Bailian2765 POJ NOI0113-03 八进制小数【进制】
- Python字符串join()方法
- 0x3a能否作为c语言常量,C语言编程遇到了宏定义的问题,求解答,万分感谢
- 【620】【信息管理学基础】【真题背诵】
- 嵩天《Python数据分析与展示》实例3:Matplotlib基础图表绘制
- 微信公众号常见微信吸粉方式
- mysql按月查询统计(统计近12个月的项目个数)
- 基于区块链的二维码门禁系统成品演示视频
- 什么是Bom,常用的bom属性又有哪些?
- 爬虫在遇到post请求时的一种解决{“code“:40005,“msg“:“req json error“}问题的思路
- 《老男孩》上映 “娱乐宝”投资电影进入回收期
- c语言的四大圣经,传说中的模拟电子四大圣经--值得永久珍藏
- 联邦学习-让隐私和 AI 相伴前行
热门文章
- ULID 与 UUID:用于 JavaScript 的可排序随机 ID 生成器
- 诸葛分享:精细化APP运营要注意些什么呢?
- 华为汽车产业深度剖析
- SAP workflow基础-概览
- Visual Assist Trial 的补丁安装和破解
- 软件的开发环境、测试环境(沙盒环境sandbox)、生产环境
- 关于JS中如何获取页面数据
- 满足lisheng需求 linux添加环境变量 linux批处理 2016.04.25小结
- php 服务器日志管理系统,ThinkPHP6实现简单的记录网站后台管理操作日志方法
- 阿里云云导播---直播时,优化延迟及观看直播时清晰度迷糊问题