在上一篇的博客中介绍了自定义控件的属性,详情见 android 自定义控件属性(TypedArray以及attrs解释)。那么在这基础上实现随机验证码生成,里面的代码是自定义控件以及涉及到自定义view绘画。
资源下载
看到这个效果图是不是感觉还可以。那么就看看源码吧。
继承View,重写了
onMeasure(int widthMeasureSpec, int heightMeasureSpec)
onDraw(Canvas canvas)方法。
看代码,有详细注释了。
package com.example.authcodeview.view; import java.util.Random; import com.example.authcodeview.R; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; import android.util.AttributeSet; import android.util.TypedValue; import android.view.View; public class AuthCodeView extends View { // 点数设置 public static final int POINT_NUM = 100; // 线段数设置 public static final int LINE_NUM = 2; //文本 private String mTitleText; // 文本的颜色 private int mTitleTextColor; // 文本的大小 private int mTitleTextSize; String[] mCheckNum = new String[4]; Random random = new Random(); //绘制时控制文本绘制的范围 private Rect mBound; private Paint mPaint; public AuthCodeView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public AuthCodeView(Context context) { this(context, null); } /** * 获得我自定义的样式属性 * * @param context * @param attrs * @param defStyle */ public AuthCodeView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); /** * 获得我们所定义的自定义样式属性 */ TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.AuthCodeView, defStyle, 0); //获取在attr文件下,名字为AuthCodeView的declare-styleable属性有几个 int n = a.getIndexCount(); for (int i = 0; i
5、在MainActivity中怎么使用这个自定义AuthCodeView
package com.example.authcodeview; import com.example.authcodeview.view.AuthCodeView; import android.os.Bundle; import android.app.Activity; import android.view.View; import android.view.View.OnClickListener; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity implements OnClickListener { private AuthCodeView mauthCodeView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initUI(); } private void initUI() { mauthCodeView = (AuthCodeView)findViewById(R.id.AuthCodeView); findViewById(R.id.button1).setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.button1: EditText editText = (EditText)findViewById(R.id.editText1); String codeString = editText.getText().toString().trim(); if (codeString.equals(mauthCodeView.getAuthCode())) { Toast.makeText(this, "验证码验证正确!", Toast.LENGTH_LONG).show(); }else { Toast.makeText(this, "验证码错误!", Toast.LENGTH_LONG).show(); } break; default: break; } } }
再说一遍资源下载点击资源下载