Android锁定EditText内容和随机生成验证码
昨天写了个小Demo,实现了随机生成验证码,和锁定EditText两个小功能,先看一下效果图:
锁定EditText在我们不须要用户编辑EditText内容的时候能够用到,实现还是非常easy的,一行代码:
etLock.setEnabled(false);
随机生成验证码,主要是用了Random函数,以及将View转为Bitmap的逻辑,也没有难点,以下贴一下代码,供须要的朋友參考:
Main.java
package com.zms.textlock; import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView; import java.util.Random; public class Main extends ActionBarActivity {
private Button btnLock;
private EditText etLock;
private String numStrTmp = "";
private String numStr = "";
private int[] numArray = new int[4];
private int[] colorArray = new int[6]; private TextView tvHideA;
private TextView tvHideB;
private TextView tvHideC;
private TextView tvHideD;
private ImageView ivNumA;
private ImageView ivNumB;
private ImageView ivNumC;
private ImageView ivNumD;
private Button btnCheck;
private TextView tvCheck;
private EditText etCheck; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnLock = (Button) findViewById(R.id.btnLock);
etLock = (EditText) findViewById(R.id.etLock);
btnLock.setOnClickListener(new onClickListenerImp()); tvHideA = (TextView) findViewById(R.id.tvHideA);
tvHideB = (TextView) findViewById(R.id.tvHideB);
tvHideC = (TextView) findViewById(R.id.tvHideC);
tvHideD = (TextView) findViewById(R.id.tvHideD);
ivNumA = (ImageView) findViewById(R.id.ivNumA);
ivNumB = (ImageView) findViewById(R.id.ivNumB);
ivNumC = (ImageView) findViewById(R.id.ivNumC);
ivNumD = (ImageView) findViewById(R.id.ivNumD); tvCheck = (TextView) findViewById(R.id.tvCheck);
etCheck = (EditText) findViewById(R.id.etCheck);
btnCheck = (Button) findViewById(R.id.btnCheck);
btnCheck.setOnClickListener(new onClickListenerImp()); setNum();
} private class onClickListenerImp implements View.OnClickListener {
@Override
public void onClick(View view) {
if (view == btnLock) {
if (etLock.isEnabled()) {
etLock.setEnabled(false);
btnLock.setText("解锁");
} else {
etLock.setEnabled(true);
btnLock.setText("锁定");
}
} else if (view == btnCheck) {
if (etCheck.getText().toString() != null && etCheck.getText().toString().trim().length() > 0) {
tvCheck.setVisibility(View.VISIBLE);
if (numStr.equals(etCheck.getText().toString())) {
tvCheck.setText("输入正确");
tvCheck.setTextColor(Color.GREEN);
} else {
tvCheck.setText("输入错误");
tvCheck.setTextColor(Color.RED);
}
} else {
setNum();
tvCheck.setVisibility(View.GONE);
//Toast.makeText(Main.this, "Please Input Verify Code", Toast.LENGTH_SHORT).show();
}
}
}
} public void initNum() {
numStr = "";
numStrTmp = "";
for (int i = 0; i < numArray.length; i++) {
int numIntTmp = new Random().nextInt(10);
numStrTmp = String.valueOf(numIntTmp);
numStr = numStr + numStrTmp;
numArray[i] = numIntTmp;
}
} public void setNum() { initNum();
tvHideA.setText("" + numArray[0]);
tvHideA.setTextColor(randomColor());
tvHideB.setText("" + numArray[1]);
tvHideB.setTextColor(randomColor());
tvHideC.setText("" + numArray[2]);
tvHideC.setTextColor(randomColor());
tvHideD.setText("" + numArray[3]);
tvHideD.setTextColor(randomColor()); // Num 1
Matrix matrixA = new Matrix();
matrixA.reset();
matrixA.setRotate(randomAngle());
Bitmap bmNumA = Bitmap.createBitmap(getBitmapFromView(tvHideA, 20, 50), 0, 0, 20, 50, matrixA, true);
ivNumA.setImageBitmap(bmNumA);
// Num 2
Matrix matrixB = new Matrix();
matrixB.reset();
matrixB.setRotate(randomAngle());
Bitmap bmNumB = Bitmap.createBitmap(getBitmapFromView(tvHideB, 20, 50), 0, 0, 20, 50, matrixB, true);
ivNumB.setImageBitmap(bmNumB);
// Num 3
Matrix matrixC = new Matrix();
matrixC.reset();
matrixC.setRotate(randomAngle());
Bitmap bmNumC = Bitmap.createBitmap(getBitmapFromView(tvHideC, 20, 50), 0, 0, 20, 50, matrixC, true);
ivNumC.setImageBitmap(bmNumC);
// Num 4
Matrix matrixD = new Matrix();
matrixD.reset();
matrixD.setRotate(randomAngle());
Bitmap bmNumD = Bitmap.createBitmap(getBitmapFromView(tvHideD, 20, 50), 0, 0, 20, 50, matrixD, true);
ivNumD.setImageBitmap(bmNumD);
} public int randomAngle() {
return 20 * (new Random().nextInt(5) - new Random().nextInt(3));
} public int randomColor() {
colorArray[0] = 0xFF000000; // BLACK
colorArray[1] = 0xFFFF00FF; // MAGENTA
colorArray[2] = 0xFFFF0000; // RED
colorArray[3] = 0xFF00FF00; // GREEN
colorArray[4] = 0xFF0000FF; // BLUE
colorArray[5] = 0xFF00FFFF; // CYAN
//colorArray[6] = 0xFFFFFF00; // YELLOW:看不清楚 int randomColorId = new Random().nextInt(6);
return colorArray[randomColorId];
} public static Bitmap getBitmapFromView(View view, int width, int height) {
int widthSpec = View.MeasureSpec.makeMeasureSpec(width, View.MeasureSpec.EXACTLY);
int heightSpec = View.MeasureSpec.makeMeasureSpec(height, View.MeasureSpec.EXACTLY);
view.measure(widthSpec, heightSpec);
view.layout(0, 0, width, height);
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
view.draw(canvas); return bitmap;
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} @Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId(); //noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
布局文件: main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context=".Main"> <TextView
android:layout_width="wrap_content"
android:text="锁定EditText内容:"
android:layout_height="wrap_content" /> <LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"> <EditText
android:id="@+id/etLock"
android:layout_width="200dp"
android:layout_height="wrap_content" /> <Button
android:id="@+id/btnLock"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="锁定" />
</LinearLayout> <TextView
android:layout_marginTop="50dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="随机生成4位验证码:" /> <LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"> <LinearLayout
android:id="@+id/layVerify"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"> <TextView
android:id="@+id/tvHideA"
android:layout_width="70dp"
android:layout_height="70dp"
android:textSize="30dp"
android:gravity="center"
android:visibility="gone" /> <TextView
android:id="@+id/tvHideB"
android:layout_width="70dp"
android:layout_height="70dp"
android:textSize="30dp"
android:gravity="center"
android:visibility="gone" /> <TextView
android:id="@+id/tvHideC"
android:layout_width="70dp"
android:layout_height="70dp"
android:textSize="30dp"
android:gravity="center"
android:visibility="gone" /> <TextView
android:id="@+id/tvHideD"
android:layout_width="70dp"
android:layout_height="70dp"
android:textSize="30dp"
android:gravity="center"
android:visibility="gone" />
</LinearLayout> <LinearLayout
android:layout_width="wrap_content"
android:orientation="horizontal"
android:layout_height="wrap_content"> <ImageView
android:id="@+id/ivNumA"
android:layout_width="50dp"
android:layout_height="70dp" /> <ImageView
android:id="@+id/ivNumB"
android:layout_width="50dp"
android:layout_height="70dp" /> <ImageView
android:id="@+id/ivNumC"
android:layout_width="50dp"
android:layout_height="70dp" /> <ImageView
android:id="@+id/ivNumD"
android:layout_width="50dp"
android:layout_height="70dp" />
</LinearLayout> </LinearLayout> <LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"> <EditText
android:id="@+id/etCheck"
android:hint="验证码"
android:layout_width="80dp"
android:layout_height="wrap_content" /> <TextView
android:id="@+id/tvCheck"
android:text="结果"
android:visibility="gone"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout> <Button
android:id="@+id/btnCheck"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="确定" />
</LinearLayout>
有疑问欢迎交流~
还是上传一下代码吧,是用Android Studio写的。链接:代码下载
转载请注明出处:周木水的CSDN博客 http://blog.csdn.net/zhoumushui
我的GitHub:周木水的GitHub https://github.com/zhoumushui
Android锁定EditText内容和随机生成验证码的更多相关文章
- Python随机生成验证码的两种方法
Python随机生成验证码的方法有很多,今天给大家列举两种,大家也可以在这个基础上进行改造,设计出适合自己的验证码方法方法一:利用range Python随机生成验证码的方法有很多,今天给大家列举两种 ...
- 随机生成验证码及python中的事务
1.随机生成验证码 # import random # print(random.random()) #-1的小数 # print(random.randint(,)) #包括1和3 # print( ...
- js随机生成验证码以及随机颜色
Javascript通过Math.random()随机生成验证码. 代码如下: <!DOCTYPE html><html> <head> <meta char ...
- 随机生成验证码(JS)
效果展示 实现原理 1. html:一般就是一个div: <div id="code"></div> ,样式根据需求设计. 2. JS:1)将所有的验证码所 ...
- 现在有一个长度20的SET,其中每个对象的内容是随机生成的字符串,请写出遍历删除LIST里面字符串含"2"的对象的代码。
现在有一个长度20的SET,其中每个对象的内容是随机生成的字符串,请写出遍历删除LIST里面字符串含"2"的对象的代码. public class RemoveTwo { //le ...
- Djaingo 随机生成验证码(PIL)
基础: https://www.cnblogs.com/wupeiqi/articles/5812291.html 实例: https://www.cnblogs.com/6324TV/p/88112 ...
- php随机生成验证码代码
<?php session_start(); //产生一个随机的字符串验证码 $checkcode=""; for ($i=0;$i<4;$i++){ $checkco ...
- .Net (MVC) 随机生成验证码
以前一直对C#的GDI画图部分知识点不怎么用所以忘得差不多了,这两天正好公司要做一个博客系统,其中一个需求就是留言时为了防止恶意攻击必须填写验证码,正好借着这个机会复习了一下,以下是实现代码,写的比较 ...
- js随机生成验证码及其颜色
今天迎来了2018年第一场雪,这个美好的日子,总的写点什么纪念一下,在这里写了一个在js中使用Math.random()函数,随机生成四位数的验证码及其验证码换颜色. js代码如下: var arra ...
随机推荐
- 我学的是设计模式的视频教程——命令模式vs策略模式,唠嗑
课程视频 命令模式vs策略模式 唠嗑 课程笔记 课程笔记 课程代码 课程代码 新课程火热报名中 课程介绍 版权声明:本文博主原创文章,博客,未经同意不得转载.
- java nio 网络框架实现(转)
maven项目https://github.com/solq360/common 链式编/解码 链路层链式处理 管道管理socket 多协议处理非常方便 仿netty NioEventLoop 单线程 ...
- 栈上分配存储器的方法 alloca 抽样
声明一个局部变量,必须分配在堆栈上,但有或没有它的方法 当然,,那是 alloca 下面的代码显示了可变长度参数转换,alloca 要使用 int main(int argc, char ** arg ...
- Android4.2.2由于越来越多的物理按键(frameworks)
当我们改变frameworks之后可能: make: *** [out/target/common/obj/PACKAGING/checkapi-current-timestamp] 错误 38 解决 ...
- 有关Struts2a的ction直接使用response异步问题
假设我们在项目中使用struts2,正在使用ajax而通信时后端程序.为简单起见,我们经常使用下面的方法: ActionContext ac = ActionContext.getCo ...
- Android组件系列----ContentProvider内容提供商【5】
2.执行query()方法,查询全部记录(眼下一共两条记录).后台输出效果例如以下: 经測试,其它方法也都是能够运行的. 事实证明,新建的另外一个project文件ContentResolverTes ...
- T-SQL问题解决集锦——数据加解密(2)
原文:T-SQL问题解决集锦--数据加解密(2) 问题三.如何让指定用户可以对数据表进行Truncate操作? Truncate在对大表全删除操作时,会明显比Delete语句更快更有效,但是因为它不需 ...
- SQL Server 内存泄露(memory leak)——游标导致的内存问题
原文:SQL Server 内存泄露(memory leak)--游标导致的内存问题 转自:http://blogs.msdn.com/b/apgcdsd/archive/2011/07/01/sql ...
- 并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法(转)
在Java多线程应用中,队列的使用率很高,多数生产消费模型的首选数据结构就是队列(先进先出).Java提供的线程安全的Queue可以分为阻塞队列和非阻塞队列,其中阻塞队列的典型例子是BlockingQ ...
- 如何出色的研究 RGSS3 (三) 形式的调整的细节
在一个我们研究了添加到窗体方法的选择,这个问题来研究窗体类的细节. 所有形式的父类的 Window_Base 四个参数需要初始化. #--------------------------------- ...