当前位置: 移动技术网 > IT编程>移动开发>Android > Android 验证码功能实现代码

Android 验证码功能实现代码

2019年07月24日  | 移动技术网IT编程  | 我要评论

内衣秀露了毛,xman26期,yanzhou

先给大家展示下效果图,如果大家感觉还不错,请参考实现代码

很简单的一个例子,点击刷新验证码,刷新当前显示的验证码,点击确定,如果输入的和显示的匹配,就会跳转到下一个界面中,这里只是实现了跳转,并没有进行其它的操作

好了 接下来就是代码了

首先看mainactivity的布局

<relativelayout 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"
tools:context=".mainactivity" >
<textview
android:id="@+id/textview1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignparentleft="true"
android:layout_alignparenttop="true"
android:layout_marginleft="20dp"
android:layout_margintop="77dp"
android:text="验证码:" />
<edittext
android:id="@+id/vc_code"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignbaseline="@+id/textview1"
android:layout_alignbottom="@+id/textview1"
android:layout_torightof="@+id/textview1"
android:ems="10" >
<requestfocus />
</edittext>
<button
android:id="@+id/vc_ok"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignleft="@+id/vc_image"
android:layout_alignright="@+id/vc_shuaixi"
android:layout_below="@+id/vc_shuaixi"
android:layout_margintop="15dp"
android:text="确定" />
<button
android:id="@+id/vc_shuaixi"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignright="@+id/vc_code"
android:layout_aligntop="@+id/vc_image"
android:layout_marginright="20dp"
android:text="刷新验证码" />
<imageview
android:id="@+id/vc_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignleft="@+id/textview1"
android:layout_below="@+id/vc_code"
android:layout_margintop="25dp"
android:src="@drawable/ic_launcher" />
</relativelayout>

mainactivity代码

package com.example.yanzhengma;
import android.r.string;
import android.os.bundle;
import android.app.activity;
import android.content.clipdata.item;
import android.content.intent;
import android.view.menu;
import android.view.view;
import android.view.view.onclicklistener;
import android.widget.button;
import android.widget.edittext;
import android.widget.imageview;
import android.widget.textview;
import android.widget.toast;
public class mainactivity extends activity implements onclicklistener {
imageview vc_image; // 图片
button vc_shuaixi, vc_ok;
string getcode = null;
edittext vc_code;
@override
protected void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
setcontentview(r.layout.activity_main);
vc_image = (imageview) findviewbyid(r.id.vc_image);
vc_image.setimagebitmap(code.getinstance().getbitmap());
vc_code = (edittext) findviewbyid(r.id.vc_code);
getcode = code.getinstance().getcode(); // 获取显示的验证码
vc_shuaixi = (button) findviewbyid(r.id.vc_shuaixi);
vc_shuaixi.setonclicklistener(this);
vc_ok = (button) findviewbyid(r.id.vc_ok);
vc_ok.setonclicklistener(this);
}
@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 void onclick(view view) {
// todo auto-generated method stub
switch (view.getid()) {
case r.id.vc_shuaixi:
vc_image.setimagebitmap(code.getinstance().getbitmap());
getcode = code.getinstance().getcode();
break;
case r.id.vc_ok:
string v_code = vc_code.gettext().tostring().trim();
if (v_code == null || v_code.equals("")) {
toast.maketext(mainactivity.this, "验证码为空", toast.length_short).show();
} else if (!v_code.equals(getcode)) {
toast.maketext(mainactivity.this, "验证码错误", toast.length_short).show();
} else {
toast.maketext(mainactivity.this, "验证成功", toast.length_short).show();
intent itintent = new intent(mainactivity.this,
secondactivity.class);
startactivity(itintent);
mainactivity.this.finish();
}
break;
}
}
}

好了,到重点部分了,绘制验证码

package com.example.yanzhengma;
import java.util.random;
import android.graphics.bitmap;
import android.graphics.bitmap.config;
import android.graphics.canvas;
import android.graphics.color;
import android.graphics.paint;
public class code {
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 code bputil;
private code() {
};
public static code getinstance() {
if (bputil == null)
bputil = new code();
return bputil;
}
private static final int default_code_length = 4;// 验证码的长度 这里是4位
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 = 35;// 左边距范围值
private static final int base_padding_top = 42;// 上边距
private static final int range_padding_top = 15;// 上边距范围值
private static final int default_width = 200;// 默认宽度.图片的总宽
private static final int default_height = 70;// 默认高度.图片的总高
private final int default_color = 0xdf;// 默认背景颜色值
private int width = default_width;
private int height = default_height;
private int base_padding_left = base_padding_left;
private int range_padding_left = range_padding_left;
private int base_padding_top = base_padding_top;
private int range_padding_top = range_padding_top;
private int codelength = default_code_length;
private int line_number = default_line_number;
private int font_size = default_font_size;
private string code;// 验证码
private int padding_left, padding_top;
private random random = new random();
private bitmap createbitmap() {
padding_left = 0;
bitmap bp = bitmap.createbitmap(width, height, config.argb_8888);
canvas c = new canvas(bp);
code = createcode();
c.drawcolor(color.rgb(default_color, default_color, default_color));
paint paint = new paint();
paint.settextsize(font_size);
for (int i = 0; i < code.length(); i++) {
randomtextstyle(paint);
randompadding();
c.drawtext(code.charat(i) + "", padding_left, padding_top, paint);
}
for (int i = 0; i < line_number; i++) {
drawline(c, paint);
}
c.save(canvas.all_save_flag);
c.restore();//
return bp;
}
public string getcode() {
return code;
}
public bitmap getbitmap() {
return createbitmap();
}
private string createcode() {
stringbuilder buffer = new stringbuilder();
for (int i = 0; i < codelength; i++) {
buffer.append(chars[random.nextint(chars.length)]);
}
return buffer.tostring();
}
private void drawline(canvas canvas, paint paint) {
int color = randomcolor();
int startx = random.nextint(width);
int starty = random.nextint(height);
int stopx = random.nextint(width);
int stopy = random.nextint(height);
paint.setstrokewidth(1);
paint.setcolor(color);
canvas.drawline(startx, starty, stopx, stopy, paint);
}
private int randomcolor() {
return randomcolor(1);
}
private int randomcolor(int rate) {
int red = random.nextint(256) / rate;
int green = random.nextint(256) / rate;
int blue = random.nextint(256) / rate;
return color.rgb(red, green, blue);
}
private void randomtextstyle(paint paint) {
int color = randomcolor();
paint.setcolor(color);
paint.setfakeboldtext(random.nextboolean()); // true为粗体,false为非粗体
float skewx = random.nextint(11) / 10;
skewx = random.nextboolean() ? skewx : -skewx;
paint.settextskewx(skewx); // float类型参数,负数表示右斜,整数左斜
}
private void randompadding() {
padding_left += base_padding_left + random.nextint(range_padding_left);
padding_top = base_padding_top + random.nextint(range_padding_top);
}
}

好了 代码都有注释,应该会看的明白的

以上所述是小编给大家介绍的android 验证码功能实现代码,希望对大家有所帮助

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网