自定义密码输入框,实现可以切换密码是否可见,删除以及焦点状态改变是背景框颜色的改变
注:存在部分小bug。bug如下。欢迎大神帮忙指正
- 多行输入时删除图片被挤出可视范围
- 多行输入时焦点线被挤出可视范围
- 输入文字长度过长时,会出现在右侧图片底部
- 每次切换密码是否可见时焦点边框的位置会发生改变
效果图也十分简单,和普通的editText几乎无区别,
只有在获取焦点时,下划线颜色的改变以及出现显示隐藏密码图标和删除图标,具体效果就不展示了,直接拷贝代码,更换图片文件就能使用。
代码如下
package com.xxxx.Login;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.text.InputType;
import android.util.AttributeSet;
import android.view.MotionEvent;
import androidx.appcompat.widget.AppCompatEditText;
import com.minimaxhk.cmis.R;
public class LoginPassWordEditText extends AppCompatEditText {
/**
* 底部线的默认颜色
*/
private int downLineDefaultColor;
/**
* 底部线获取焦点颜色
*/
private int downLineFocusColor;
/**
* 底部线的画笔
*/
private Paint downLinePaint;
/**
* 清除图片的画笔
*/
private Paint clearPaint;
/***
* 右侧要显示的图片
*/
private Drawable iconRightDrawable;
/***
* 显示隐藏密码的图标
*/
private Bitmap iconRightContent;
/**
* 清除内容图标
*/
private Bitmap iconClear;
/***
* 是否获取焦点
*/
private boolean hasFocus;
/***
* 当前是否显示密码内容
*/
private boolean isShow = false;
/***
* 画出的两个图的间距
*/
private final int PADDING = 50;
public LoginPassWordEditText(Context context) {
this(context, null);
}
public LoginPassWordEditText(Context context, AttributeSet attrs) {
this(context, attrs, R.attr.editTextStyle);
}
public LoginPassWordEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
/**
* 初始化操作