废话不多说上效果图:

android图形验证码_第1张图片

给上activity_main.xml布局代码:

                            

再上mainactivity代码:
package com.example.codedemo;import android.app.Activity;import android.graphics.Bitmap;import android.os.Bundle;import android.text.TextUtils;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.ImageView;import android.widget.Toast;public class MainActivity extends Activity implements OnClickListener {private ImageView image;private EditText et;private Button btn,submit;private String codeStr;private CodeUtils codeUtils;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();}private void initView() {image = (ImageView) findViewById(R.id.image);et = (EditText) findViewById(R.id.et);btn = (Button) findViewById(R.id.btn);submit = (Button) findViewById(R.id.btn_submit);btn.setOnClickListener(this);submit.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn:codeUtils = CodeUtils.getInstance();Bitmap bitmap = codeUtils.createBitmap();image.setImageBitmap(bitmap);break;case R.id.btn_submit:codeStr = et.getText().toString().trim();Log.e("codeStr", codeStr);if (null == codeStr || TextUtils.isEmpty(codeStr)) {Toast.makeText(this, "请输入验证码", 0).show();return;}String code = codeUtils.getCode();Log.e("code", code);if (code.equalsIgnoreCase(codeStr)) {Toast.makeText(this, "验证码正确", 0).show();} else {Toast.makeText(this, "验证码错误", 0).show();}break;default:break;}}}

最后附上CodeUtils代码:
package com.example.codedemo;import android.graphics.Bitmap;  import android.graphics.Bitmap.Config;  import android.graphics.Canvas;  import android.graphics.Color;  import android.graphics.Paint;    import java.util.Random;    /**  * Created by yao  * 用于图片验证码的工具类  */  public class CodeUtils {      private static final char[] CHARS = {              '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',              'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',              'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',              'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',              'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'      };        private static CodeUtils mCodeUtils;      private int mPaddingLeft, mPaddingTop;      private StringBuilder mBuilder = new StringBuilder();      private Random mRandom = new Random();        //Default Settings      private static final int DEFAULT_CODE_LENGTH = 6;//验证码的长度  这里是6位      private static final int DEFAULT_FONT_SIZE = 60;//字体大小      private static final int DEFAULT_LINE_NUMBER = 3;//多少条干扰线      private static final int BASE_PADDING_LEFT = 20; //左边距      private static final int RANGE_PADDING_LEFT = 30;//左边距范围值      private static final int BASE_PADDING_TOP = 70;//上边距      private static final int RANGE_PADDING_TOP = 15;//上边距范围值      private static final int DEFAULT_WIDTH = 300;//默认宽度.图片的总宽      private static final int DEFAULT_HEIGHT = 100;//默认高度.图片的总高      private static final int DEFAULT_COLOR = 0xDF;//默认背景颜色值  private String code;      public static CodeUtils getInstance() {          if(mCodeUtils == null) {              mCodeUtils = new CodeUtils();          }          return mCodeUtils;      }        //生成验证码图片      public Bitmap createBitmap() {          mPaddingLeft = 0; //每次生成验证码图片时初始化          mPaddingTop = 0;            Bitmap bitmap = Bitmap.createBitmap(DEFAULT_WIDTH, DEFAULT_HEIGHT, Config.ARGB_8888);          Canvas canvas = new Canvas(bitmap);            code = createCode();            canvas.drawColor(Color.rgb(DEFAULT_COLOR, DEFAULT_COLOR, DEFAULT_COLOR));          Paint paint = new Paint();          paint.setTextSize(DEFAULT_FONT_SIZE);            for (int i = 0; i < code.length(); i++) {              randomTextStyle(paint);              randomPadding();              canvas.drawText(code.charAt(i) + "" , mPaddingLeft, mPaddingTop, paint);          }            //干扰线          for (int i = 0; i < DEFAULT_LINE_NUMBER; i++) {              drawLine(canvas, paint);          }            canvas.save(Canvas.ALL_SAVE_FLAG);//保存          canvas.restore();          return bitmap;      }      /**     * 得到图片中的验证码字符串     * @return      */    public String getCode() {    return code;    }      //生成验证码      public String createCode() {          mBuilder.delete(0, mBuilder.length()); //使用之前首先清空内容            for (int i = 0; i < DEFAULT_CODE_LENGTH; i++) {              mBuilder.append(CHARS[mRandom.nextInt(CHARS.length)]);          }            return mBuilder.toString();      }        //生成干扰线      private void drawLine(Canvas canvas, Paint paint) {          int color = randomColor();          int startX = mRandom.nextInt(DEFAULT_WIDTH);          int startY = mRandom.nextInt(DEFAULT_HEIGHT);          int stopX = mRandom.nextInt(DEFAULT_WIDTH);          int stopY = mRandom.nextInt(DEFAULT_HEIGHT);          paint.setStrokeWidth(1);          paint.setColor(color);          canvas.drawLine(startX, startY, stopX, stopY, paint);      }        //随机颜色      private int randomColor() {          mBuilder.delete(0, mBuilder.length()); //使用之前首先清空内容            String haxString;          for (int i = 0; i < 3; i++) {              haxString = Integer.toHexString(mRandom.nextInt(0xFF));              if (haxString.length() == 1) {                  haxString = "0" + haxString;              }                mBuilder.append(haxString);          }            return Color.parseColor("#" + mBuilder.toString());      }        //随机文本样式      private void randomTextStyle(Paint paint) {          int color = randomColor();          paint.setColor(color);          paint.setFakeBoldText(mRandom.nextBoolean());  //true为粗体,false为非粗体          float skewX = mRandom.nextInt(11) / 10;          skewX = mRandom.nextBoolean() ? skewX : -skewX;          paint.setTextSkewX(skewX); //float类型参数,负数表示右斜,整数左斜  //        paint.setUnderlineText(true); //true为下划线,false为非下划线  //        paint.setStrikeThruText(true); //true为删除线,false为非删除线      }        //随机间距      private void randomPadding() {          mPaddingLeft += BASE_PADDING_LEFT + mRandom.nextInt(RANGE_PADDING_LEFT);          mPaddingTop = BASE_PADDING_TOP + mRandom.nextInt(RANGE_PADDING_TOP);      }  }  
其中,在Default Settings中可以设置验证码图形的大小,验证码的长度,内边距,随机距离等可以根据需要进行调整。

更多相关文章

  1. android 加载 网络图片
  2. Android 拖拽图片
  3. Android使用URLConnection显示网络图片
  4. android中异步加载图片信息
  5. android图片拖动
  6. android在处理一写图片资源
  7. android 利用Canvas显示局部图片

随机推荐

  1. android 4.0 StatusBar Service
  2. Android Studio 导.so文件简单、高效的方
  3. Android(安卓)字符乱码问题的处理
  4. Android API 中文 (10) —— GridView
  5. org.litepal.exceptions.InvalidAttribut
  6. Android 中的Intent在两个Acitvity传递数
  7. Android JNI之Android.mk、Application.m
  8. android httppost
  9. 2、一、Introduction(入门):1、Applicatio
  10. 在android中获取文件的MD5值