/**
* Created by YuYuanDa on 2016-10-10.
*/
public class CheckView extends View implements View.OnClickListener{
private Context mContext;
private Paint mPaint ; // 画笔
public CheckView(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
initPaint();
//设置点击时间,当自身收到点击应该更新数字(即重新换验证码数字)
setOnClickListener(this);
}
/**
* 初始化paint(画笔)
*/
private void initPaint(){
mPaint = new Paint();
mPaint.setAntiAlias(true);//加上抗锯齿
mPaint.setTextSize(Config.TEXT_SIZE);//设置字体大小
mPaint.setStrokeWidth(3);线宽
mPaint.setColor(Config.TEXTCOLOR);//设置字体颜色颜色
//设置粗体的字体
Typeface font = Typeface.create(Typeface.SANS_SERIF, Typeface.BOLD);
mPaint.setTypeface( font );
}
@Override
public void onClick(View v) {
//在这里面更新,重新换一套验证码字符
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Config.COLOR);//先画一个背景颜色
}
}
/**
* 配置字段
*/
class Config{
// 点数设置
public static final int POINT_NUM = 100;
// 线段数设置
public static final int LINE_NUM = 2;
//设置验证码背景颜色
public static final int COLOR = Color.rgb(247,230,220);
//随机字符长度长度
public static int TEXT_LENGTH = 4;
//设置验证码字体大小
public static int TEXT_SIZE = 40;
//验证码字体颜色
public static final int TEXTCOLOR = Color.rgb(255,101,1);
}
private void drawLine(Canvas canvas){
for (int i = 0; i < Config.LINE_NUM; i++) {//根据LINE_NUM画线的数量,你可以自己配置
//划线
int[] line = getLine(getHeight(), getWidth());
canvas.drawLine(line[0], line[1], line[2], line[3], mPaint);
}
}
public static int[] getLine(int height, int width) {
int[] tempCheckNum = {0, 0, 0, 0};
for (int i = 0; i < 4; i += 2) {
tempCheckNum[i] = (int) (Math.random() * width);
tempCheckNum[i + 1] = (int) (Math.random() * height);
}
return tempCheckNum;
}
public void drawLine (float startX, float startY, float stopX, float stopY, Paint paint){ }
private void drawCircle(Canvas canvas){
// 绘制小圆点
int[] point;
for (int i = 0; i < Config.POINT_NUM; i++) {//根据POINT_NUM画点的数量,你可以自己配置
//画点
point = getPoint(getHeight(), getWidth());
canvas.drawCircle(point[0], point[1], 1, mPaint);
}
}
/**
* 随机产生点的圆心点坐标
* @param height 传入CheckView的高度值
* @param width 传入CheckView的宽度值
* @return
*/
public static int[] getPoint(int height, int width) {
int[] tempCheckNum = {0, 0, 0, 0};
tempCheckNum[0] = (int) (Math.random() * width);
tempCheckNum[1] = (int) (Math.random() * height);
return tempCheckNum;
}
public void drawCircle (float cx, float cy, float radius, Paint paint)
/**
* 产生随机数字
*/
public static int[] getCheckNum() {
int[] tempCheckNum = new int[Config.TEXT_LENGTH];//TEXT_LENGTH是产生几位数字
for (int i = 0; i < Config.TEXT_LENGTH; i++) {
tempCheckNum[i] = (int) (Math.random() * 10);//我不说你也明白了吧
}
return tempCheckNum;//产生4个数放在数组中返回
}
/**
* 计算验证码的绘制y点位置
* @param height 传入CheckView的高度值
* @return
*/
public static int getYPos(int height) {
int tempPositoin = (int) (Math.random() * height);
//不能让它画的太靠上,如果Y坐标<Config.TEXT_SIZE的时候,画出的字就会被遮盖
if (tempPositoin < Config.TEXT_SIZE) {
tempPositoin += Config.TEXT_SIZE;
}else if (tempPositoin > (height-Config.TEXT_SIZE)) {//当然也不能画的太靠下
tempPositoin -= Config.TEXT_SIZE;
}
return tempPositoin;
}
private void drawNum(Canvas canvas){
int dx = getWidth() / 5;
for (int i = 0; i < 4; i++) {//绘制验证控件上的文本
canvas.drawText("" + checkNum[i], dx, getPositon(getHeight()), mPaint);
dx += getWidth() / 5;
}
}
@Override
public void onClick(View v) {
checkNum = CheckUtil.getCheckNum();//checkNum付初值
//在这里面更新,重新换一套验证码字符
invalidate();
}
public int[] getCheckNum(); public int[] getLinePos(int height, int width) ; public int[] getCirclePoint(int height, int width); public int getPositon(int height);
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有