密码输入框
16lz
2021-01-26
最近朋友咨询了一个表格输入框,查看了以前代码,现在重新整理了一下,将输入框的边框颜色,字体颜色,分割线颜色都抽出来了,方便不同需求的设置。先看看效果图:
由于比较简单,所以直接查看代码吧,
import android.content.Context;import android.content.res.TypedArray;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.RectF;import android.util.AttributeSet;import android.util.TypedValue;import androidx.appcompat.widget.AppCompatEditText;public class PasswordEditText extends AppCompatEditText { // 画笔 private Paint mPaint; // 一个密码所占的宽度 private int mPasswordItemWidth; // 密码的个数默认为6位数 private int mPasswordNumber = 6; // 背景边框颜色 private int mBgColor = Color.parseColor("#303030"); // 背景边框大小 private int mBgSize = 1; // 背景边框圆角大小 private int mBgCorner = 0; // 分割线的颜色 private int mDivisionLineColor = mBgColor; // 分割线的大小 private int mDivisionLineSize = 1; // 密码圆点的颜色 private int mPasswordColor = mDivisionLineColor; // 密码圆点的半径大小 private int mPasswordRadius = 4; public PasswordEditText(Context context) { this(context, null); } public PasswordEditText(Context context, AttributeSet attrs) { super(context, attrs); initPaint(); initAttributeSet(context, attrs); // 设置输入模式是密码// setInputType(EditorInfo.TYPE_TEXT_VARIATION_PASSWORD); // 不显示光标 setCursorVisible(false); } /** * 初始化属性 */ private void initAttributeSet(Context context, AttributeSet attrs) { TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.PasswordEditText); // 获取大小 mDivisionLineSize = (int) array.getDimension(R.styleable.PasswordEditText_divisionLineSize, dip2px(mDivisionLineSize)); mPasswordRadius = (int) array.getDimension(R.styleable.PasswordEditText_passwordRadius, dip2px(mPasswordRadius)); mBgSize = (int) array.getDimension(R.styleable.PasswordEditText_bgSize, dip2px(mBgSize)); mBgCorner = (int) array.getDimension(R.styleable.PasswordEditText_bgCorner, 0); // 获取颜色 mBgColor = array.getColor(R.styleable.PasswordEditText_bagColor, mBgColor); mDivisionLineColor = array.getColor(R.styleable.PasswordEditText_divisionLineColor, mDivisionLineColor); mPasswordColor = array.getColor(R.styleable.PasswordEditText_passwordColor, mDivisionLineColor); array.recycle(); } /** * 初始化画笔 */ private void initPaint() { mPaint = new Paint(); mPaint.setAntiAlias(true); mPaint.setDither(true); } /** * dip 转 px */ private int dip2px(int dip) { return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dip, getResources().getDisplayMetrics()); } @Override protected void onDraw(Canvas canvas) { int passwordWidth = getWidth() - (mPasswordNumber - 1) * mDivisionLineSize; mPasswordItemWidth = passwordWidth / mPasswordNumber; // 绘制背景 drawBg(canvas); // 绘制分割线 drawDivisionLine(canvas); // 绘制密码 drawHidePassword(canvas); } /** * 绘制背景 */ private void drawBg(Canvas canvas) { mPaint.setColor(mBgColor); // 设置画笔为空心 mPaint.setStyle(Paint.Style.STROKE); mPaint.setStrokeWidth(mBgSize); RectF rectF = new RectF(mBgSize, mBgSize, getWidth() - mBgSize, getHeight() - mBgSize); // 如果没有设置圆角,就画矩形 if (mBgCorner == 0) { canvas.drawRect(rectF, mPaint); } else { // 如果有设置圆角就画圆矩形 canvas.drawRoundRect(rectF, mBgCorner, mBgCorner, mPaint); } } /** * 绘制隐藏的密码 */ private void drawHidePassword(Canvas canvas) { int passwordLength = getText().length(); mPaint.setColor(mPasswordColor); // 设置画笔为实心 mPaint.setStyle(Paint.Style.FILL); for (int i = 0; i < passwordLength; i++) { int cx = i * mDivisionLineSize + i * mPasswordItemWidth + mPasswordItemWidth / 2 + mBgSize; canvas.drawCircle(cx, getHeight() / 2, mPasswordRadius, mPaint); } } /** * 绘制分割线 */ private void drawDivisionLine(Canvas canvas) { mPaint.setStrokeWidth(mDivisionLineSize); mPaint.setColor(mDivisionLineColor); for (int i = 0; i < mPasswordNumber - 1; i++) { int startX = (i + 1) * mDivisionLineSize + (i + 1) * mPasswordItemWidth + mBgSize; canvas.drawLine(startX, mBgSize, startX, getHeight() - mBgSize, mPaint); } }}
好了,大概就是这样,如果还有不清楚,请点下面下载链接去下载:
https://download.csdn.net/download/greatdaocaoren/12669980
有兴趣可以看看下面服务号和订阅号:
更多相关文章
- Android(安卓)属性动画 实现view翻转 旋转 平移 拉伸 透明度 背
- Android(安卓)自定义Notification字体颜色适配
- Android(安卓)UI效果之绘图篇(四)
- android柱状图和饼状图的的实现
- RecyclerView之ItemDecoration由浅入深
- android setSelected及view相关知识
- Android带节点的进度条
- Android实现登录界面记住密码的存储
- android:Adapter中无法设置textview字体颜色(解决)