Android文本TextView显示验证码并EditText输入

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);
    }
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值