首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
其他好文
> 详细
验证码
时间:
2014-09-03 19:45:27
阅读:
332
评论:
0
收藏:
0
[点我收藏+]
标签:
android
color
os
io
使用
java
ar
for
art
import java.util.Random;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Bitmap.Config;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
public
class ValidateImageView
extends View {
private String TAG =
"ValidateImageView";
private Paint paint =
new Paint();
/*
* 验证码内容
*/
private String[] content =
null;
/*
* 验证码图片
*/
private Bitmap bitmap =
null;
public ValidateImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public
void draw(Canvas canvas) {
// TODO Auto-generated method stub
if (bitmap !=
null) {
canvas.drawBitmap(bitmap,
0,
0, paint);
}
else {
paint.setColor(Color.GRAY);
paint.setTextSize(
20);
canvas.drawText(
"点击换一换",
10,
30, paint);
}
super.draw(canvas);
}
/**
* 得到验证码;设置图片
* @param strContent 验证码的字符串数组
* @return
*/
public String[] getValidataAndSetImage(String[] strContent) {
content = strContent;
//产生随机数,并返回
String [] strRes = generageRadom(strContent);
Log.i(TAG,
"generate validate code: " + strRes[
0] + strRes[
1] + strRes[
2] + strRes[
3]);
// String strRes = generageRadomStr(strContent);
//传随机串和随机数
bitmap = generateValidate(content,strRes);
invalidate();
return strRes;
}
private Bitmap generateValidate(String[] strContent,String [] strRes) {
int width =
120,height =
50;
int isRes = isStrContent(strContent);
if (isRes ==
0) {
return
null;
}
Bitmap sourceBitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888);
Canvas canvas =
new Canvas(sourceBitmap);
Paint p =
new Paint();
p.setTextSize(height /
2);
p.setFakeBoldText(
true);
p.setColor(getRandColor(
200,
230,
170));
canvas.drawText(strRes[
0],
10, height /
2, p);
Matrix m1 =
new Matrix();
m1.setRotate(
15);
canvas.setMatrix(m1);
p.setColor(getRandColor(
200,
230,
170));
canvas.drawText(strRes[
1],
40, height /
2, p);
m1.setRotate(
10);
canvas.setMatrix(m1);
p.setColor(getRandColor(
200,
230,
170));
canvas.drawText(strRes[
2],
70, height /
2 -
10, p);
m1.setRotate(
15);
canvas.setMatrix(m1);
p.setColor(getRandColor(
200,
230,
170));
canvas.drawText(strRes[
3],
100, height /
2 -
15, p);
m1.setRotate(
20);
canvas.setMatrix(m1);
//障碍设置
int startX =
0,startY =
0,stopX =
0,stopY =
0;
for (
int i =
0; i <
55; i++) {
startX = pointRadom(width);
startY = pointRadom(height);
stopX = pointRadom(
15);
stopY = pointRadom(
15);
p.setColor(getRandColor(
200,
230,
220));
canvas.drawLine(startX, startY -
20, startX + stopX, startY + stopY -
20, p);
}
canvas.save();
return sourceBitmap;
}
private
int isStrContent(String[] strContent) {
if (strContent ==
null || strContent.length <=
0) {
return
0;
}
else {
return
1;
}
}
/**
* 从指定数组中随机取出4个字符(数组)
* @param strContent
* @return
*/
private String[] generageRadom(String[] strContent){
String[] str =
new String[
4];
// 随机串的个数
int count = strContent.length;
// 生成4个随机数
Random random =
new Random();
int randomResFirst = random.nextInt(count);
int randomResSecond = random.nextInt(count);
int randomResThird = random.nextInt(count);
int randomResFourth = random.nextInt(count);
str[
0] = strContent[randomResFirst].toString().trim();
str[
1] = strContent[randomResSecond].toString().trim();
str[
2] = strContent[randomResThird].toString().trim();
str[
3] = strContent[randomResFourth].toString().trim();
return str;
}
/**
* 从指定数组中随机取出4个字符(字符串)
* @param strContent
* @return
*/
private String generageRadomStr(String[] strContent){
StringBuilder str =
new StringBuilder();
// 随机串的个数
int count = strContent.length;
// 生成4个随机数
Random random =
new Random();
int randomResFirst = random.nextInt(count);
int randomResSecond = random.nextInt(count);
int randomResThird = random.nextInt(count);
int randomResFourth = random.nextInt(count);
str.append(strContent[randomResFirst].toString().trim());
str.append(strContent[randomResSecond].toString().trim());
str.append(strContent[randomResThird].toString().trim());
str.append(strContent[randomResFourth].toString().trim());
return str.toString();
}
private
int pointRadom(
int n){
Random r =
new Random();
return r.nextInt(n);
}
/**
* 给定范围获得随机颜色
*
* @param rc
* 0-255
* @param gc
* 0-255
* @param bc
* 0-255
* @return colorValue 颜色值,使用setColor(colorValue)
*/
public
int getRandColor(
int rc,
int gc,
int bc) {
Random random =
new Random();
if (rc >
255)
rc =
255;
if (gc >
255)
gc =
255;
if (bc >
255)
bc =
255;
int r = rc + random.nextInt(rc);
int g = gc + random.nextInt(gc);
int b = bc + random.nextInt(bc);
return Color.rgb(r, g, b);
}
}
验证码
标签:
android
color
os
io
使用
java
ar
for
art
原文地址:http://www.cnblogs.com/qiuyang1/p/3954331.html
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
分布式事务
2021-07-29
OpenStack云平台命令行登录账户
2021-07-29
getLastRowNum()与getLastCellNum()/getPhysicalNumberOfRows()与getPhysicalNumberOfCells()
2021-07-29
【K8s概念】CSI 卷克隆
2021-07-29
vue3.0使用ant-design-vue进行按需加载原来这么简单
2021-07-29
stack栈
2021-07-29
抽奖动画 - 大转盘抽奖
2021-07-29
PPT写作技巧
2021-07-29
003-核心技术-IO模型-NIO-基于NIO群聊示例
2021-07-29
Bootstrap组件2
2021-07-29
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!