好久没有写博客,是觉得没有太多的东西可写,今天分享一下,自定义edittext的输入框,效果图如下:
这个效果是一个输入11位手机号的效果图,分为两个步骤实现:
1.画出虚线,确定宽度和高度
2.控制焦点的定位。
虚线并不是一个图片,而是继承了EditText后,画出来的,具体的代码如下:
public class VisitCodeEditText extends EditText { private Paint paint; private Paint textPaint; private int perDashWidth; private int perGapWidth; public VisitCodeEditText(Context context) { super(context); init(context); } public VisitCodeEditText(Context context, AttributeSet attrs) { super(context, attrs); init(context); } public VisitCodeEditText(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context); } private void init(Context context) { paint = new Paint(); paint.setStrokeWidth(2); paint.setStyle(Paint.Style.STROKE); paint.setColor(Color.parseColor("#7386e6")); textPaint = new Paint(); //设置字体大小 textPaint.setTextSize(Util.dip2px(context,24)); //设置字体类型 textPaint.setTypeface(Typeface.DEFAULT); textPaint.setColor(getResources().getColor(R.color.input_visit_text_color)); //每一个虚线的宽度,1只是代表一个字符占的宽度,用什么字符都可以 perDashWidth = (int) getTextLength("1"); //每两个虚线之间的空格的宽度 perGapWidth = (int) getTextLength(" "); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); int specMode = MeasureSpec.getMode(widthMeasureSpec); //计算宽高,设置 int width = perDashWidth * 11 + perGapWidth * 10 + 20; if (specMode == MeasureSpec.EXACTLY || specMode == MeasureSpec.AT_MOST) { setMeasuredDimension(width, Util.dip2px(getContext(), 40)); } } @Override protected void onDraw(Canvas canvas) { int start = 10; for (int i = 0; i