最近朋友咨询了一个表格输入框,查看了以前代码,现在重新整理了一下,将输入框的边框颜色,字体颜色,分割线颜色都抽出来了,方便不同需求的设置。先看看效果图:

    由于比较简单,所以直接查看代码吧,

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

 

 

有兴趣可以看看下面服务号和订阅号:

更多相关文章

  1. Android(安卓)属性动画 实现view翻转 旋转 平移 拉伸 透明度 背
  2. Android(安卓)自定义Notification字体颜色适配
  3. Android(安卓)UI效果之绘图篇(四)
  4. android柱状图和饼状图的的实现
  5. RecyclerView之ItemDecoration由浅入深
  6. android setSelected及view相关知识
  7. Android带节点的进度条
  8. Android实现登录界面记住密码的存储
  9. android:Adapter中无法设置textview字体颜色(解决)

随机推荐

  1. android中的布局简要介绍
  2. Activity的布局
  3. android GPS
  4. Android程序的退出活动
  5. 2013.03.19(2)———android ActivityGroup
  6. Android(安卓)在 LinearLayout 添加分割
  7. 【Android】获取图片和视频缩略图
  8. Activity面试题集
  9. 转:android 更改avd路径
  10. Android(安卓)studio设置activity主题程