Android文本TextView显示验证码并EditText输入
今天在群里帮学友解决了个小bug,本来不值得发表博客来着,就是最基础的显示和输出吗。
但是有一点我来兴趣了,彩色数字验证码:
哈哈我就好奇多看了两眼。。
有人是不是想4056是怎么来的?
来解析一下吧。。看看4吧
a,onCreate方法中调用setNum()
b,setNum方法中调用initNum(),生成随机数,并赋值 tvHideA.setText(“” + numArray[0]);
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;
}
}
并赋值 tvHideA,设置个字体颜色
tvHideA.setText("" + numArray[0]);
tvHideA.setTextColor(randomColor());
c,制造倾斜,加粗等各异的图片显示
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);
行了。。跟大家贴下代码吧
布局文件:activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<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:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<TextView
android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_gravity="center"
android:text="登录界面" />
<EditText
android:id="@+id/edittext1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="35dp"
android:layout_marginTop="35dp"
android:hint="用户名"
android:ems="10"
android:gravity="center"/>
<EditText
android:id="@+id/edittext2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="35dp"
android:layout_marginTop="35dp"
android:hint="密码"
android:ems="10"
android:gravity="center"
android:inputType="textPassword"/>
<TextView
android:layout_marginTop="50dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="随机生成4位验证码:"/>
<LinearLayout
android:layout_width="match_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="30sp"
android:gravity="center"
android:visibility="gone"/>
<TextView
android:id="@+id/tvHideB"
android:layout_width="70dp"
android:layout_height="70dp"
android:textSize="30sp"
android:gravity="center"
android:visibility="gone"/>
<TextView
android:id="@+id/tvHideC"
android:layout_width="70dp"
android:layout_height="70dp"
android:textSize="30sp"
android:gravity="center"
android:visibility="gone"/>
<TextView
android:id="@+id/tvHideD"
android:layout_width="70dp"
android:layout_height="70dp"
android:textSize="30sp"
android:gravity="center"
android:visibility="gone"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<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
android:layout_width="match_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>
</LinearLayout>
展示视图控制文件:MainActivity
package com.yang.edittextcodedemo;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.support.v7.app.AppCompatActivity;
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 MainActivity extends AppCompatActivity {
private TextView textView;
private EditText editText1;
private EditText editText2;
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.activity_main);
textView = (TextView)findViewById(R.id.textview);
editText1 = (EditText)findViewById(R.id.edittext1);
editText2 = (EditText)findViewById(R.id.edittext2);
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 == 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);
}
}
}
}
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 ranmdomColorId = new Random().nextInt(6);
return colorArray[ranmdomColorId];
}
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) {
getMenuInflater().inflate(R.menu.menu_main,menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings){
return true;
}
return super.onOptionsItemSelected(item);
}
}