自定义控件起步(四)--自定义验证码(下)
2016-06-19 22:29
351 查看
接着上一篇,遗留了几个问题,年分别去解决
1,我们先添加一个自定义属性 验证码的数值类型
同样是在构造方法中设置,并让这个类实现OnClickListener
3.来看下获取验证码的方法
先创建一个存放验证码的变量并在构造方法中创建对象
点击这里下载源码
1,我们先添加一个自定义属性 验证码的数值类型
<attr name="security_text_type" format="enum"> <enum name="number" value="1" /> <enum name="letter" value="2" /> </attr>在布局文件上添加:
dsecurity:security_text_type="number"在构造方法中获取这个属性值
security_text_type = typedArray.getString(R.styleable.securitycode_security_text_type);2.现在已经确定验证码的类型是字母还是数字了,接下来我们为他设置点击监听
同样是在构造方法中设置,并让这个类实现OnClickListener
setOnClickListener(this);重写onClick方法
@Override public void onClick(View v) {// 根据随机数来设置验证码 security_text = getRandomText();//获取随机码 onMeasure(0, 0);//重新测量 postInvalidate();//刷新界面 }注意: 为什么要重新测量?小写字母和大写字母占的位置不一样 就需要重新测量
3.来看下获取验证码的方法
先创建一个存放验证码的变量并在构造方法中创建对象
private StringBuffer randomText;获取验证码
private int[] defrence = { 65, 97 };//asc码的差值 65是大写的A 97是a private String getRandomText() { randomText.delete(0, randomText.length());//先清空 Random random = new Random();//创建一个Random对象 for (int i = 0; i < 4; i++) {//循环4次 每次往randomText中添加一个字符 if (TextUtils.equals("1", security_text_type)) {//如果验证码的类型是1(数字) randomText.append(random.nextInt(10));//每次添加一个数字进去 } else {//不然 类型就是字母 char zimu = (char) (random.nextInt(26) + defrence[random .nextInt(2)]); randomText.append(zimu); } } return randomText.toString(); }4.添加一个验证码改变的监听
public void setOnSecurityClickListener(OnSecurityChangedListener listener) { this.listener = listener; } private OnSecurityChangedListener listener; public interface OnSecurityChangedListener { void onChanged(String security_text); }在点击事件的onClick方法中调用
if (listener != null) {// 设置验证码改变的监听 listener.onChanged(security_text); }5.在MainActivity中测试一下
SecurityCodeView security_code = (SecurityCodeView) findViewById(R.id.security_code); security_code.setOnSecurityClickListener(new OnSecurityChangedListener() { @Override public void onChanged(String security_text) { Toast.makeText(MainActivity.this,"验证码更改为:" + security_text, Toast.LENGTH_SHORT).show(); }});6.给这个布局文件中添加一个editext,并在MainActivity中添加一个文字改变的监听
editext = (EditText) findViewById(R.id.editext); editext.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { if (s.length() == 4) { if (TextUtils.equals(s, security_code.getSecurityCode())) { Toast.makeText(MainActivity.this, "验证码输入正确", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(MainActivity.this, "验证码输入错误", Toast.LENGTH_SHORT).show(); } } } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { } });好了运行一下,看看效果
点击这里下载源码
相关文章推荐
- 自定义控件起步(三)--自定义验证码(上)
- 启发孩子的几个小问题1
- 产生死锁的原因
- js在ie下打开对话窗口的方式
- code1064 虫食算
- Android 项目在Eclipse中的目录结构
- 《人性的弱点》卡耐基
- 20145302张薇《Java程序设计》第十六周课程总结
- iOS新闻客户端开发教程8-加载更多和新闻详情
- Android 四大组件 —— 活动(使用Intent 实现活动的显示跳转)
- JavaWeb应用中使用JavaMail发送邮件
- Leetcode-4. Median of Two Sorted Arrays
- 【51CTO学院三周年】毕业三周年
- Android 四大组件 —— 活动(活动的隐式跳转)
- hadoop2.4.1伪分布式搭建基本流程
- Python 列表(List)
- 第16周课程总结
- 一些操作系统安全设置
- 线程的理解
- net框架运行原理