Android 实现验证码效果图

自定义验证码图片view

public class CheckView extends View {Context mContext;String mCheckCode = null;Paint mTempPaint = new Paint();private final int mPointNum;private final int mLineNum;private  int mTextLength;private final float mTextSize;
//    private final int mTextColor;private final int mBgColor;// 验证码public CheckView(Context context, AttributeSet attrs) {super(context, attrs);mContext = context;TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CheckView);// 获取随机点的个数mPointNum = a.getInteger(R.styleable.CheckView_point_num, 0);// 获取随机线的条数mLineNum = a.getInteger(R.styleable.CheckView_line_num, 0);// 获取验证码长度
//        mTextLength = a.getInteger(R.styleable.CheckView_text_length, 2);
//        mTextLength = mCheckCode.length();// 获取验证码字体大小mTextSize = a.getDimension(R.styleable.CheckView_text_size, 30);// 获取验证码字体颜色
//        mTextColor = a.getColor(R.styleable.CheckView_text_color, 0XFFFFFFFF);// 获取背景颜色mBgColor = a.getColor(R.styleable.CheckView_bg_color, 0XFFFFFFFF);a.recycle();mTempPaint.setAntiAlias(true);mTempPaint.setTextSize(mTextSize);mTempPaint.setStrokeWidth(3);
//        Log.d("CheckView", "point_num = " + mPointNum);
//        Log.d("CheckView", "line_num = " + mLineNum);
//        Log.d("CheckView", "text_length = " + mTextLength);
//        Log.d("CheckView", "text_color = " + mTextColor);
//        Log.d("CheckView", "text_size = " + mTextSize);
//        Log.d("CheckView", "bg_color = " + mBgColor);}public void onDraw(Canvas canvas) {// 生成验证码
//        mCheckCode = makeCheckCode();// 设置二维码背景色canvas.drawColor(mBgColor);final int height = getHeight();// 获得CheckView控件的高度final int width = getWidth();// 获得CheckView控件的宽度if (mTextLength==0){return;}int dx = width / mTextLength / 2;char[] checkNum = mCheckCode.toCharArray();for (int i = 0; i < mTextLength; i++) {// 绘制验证控件上的文本canvas.drawText("" + checkNum[i], dx, getPositon(height), mTempPaint);dx += width / (mTextLength + 1);}int[] line;for (int i = 0; i < mLineNum; i++) {// 划线line = getLine(height, width);canvas.drawLine(line[0], line[1], line[2], line[3], mTempPaint);}// 绘制小圆点int[] point;for (int i = 0; i < mPointNum; i++) {// 画点point = getPoint(height, width);canvas.drawCircle(point[0], point[1], 1, mTempPaint);}}/*** 生成新的验证码*/public void invaliChenkCode(String sss) {mCheckCode = sss;mTextLength = sss.length();invalidate();}public String getCheckCode() {return mCheckCode;}/*** 产生随机验证码** @return*/public String makeCheckCode() {StringBuffer sb = new StringBuffer();for (int i = 0; i < mTextLength; i++) {int temp = (int) (Math.random() * 10);sb.append(temp);}return sb.toString();}/*** 计算验证码的绘制y点位置** @param height 传入CheckView的高度值* @return*/public int getPositon(int height) {int tempPositoin = (int) (Math.random() * height);if (tempPositoin < 50) {tempPositoin += 50;}return tempPositoin;}/*** 随机产生划线的起始点坐标和结束点坐标** @param height 传入CheckView的高度值* @param width  传入CheckView的宽度值* @return 起始点坐标和结束点坐标*/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;}/*** 随机产生点的圆心点坐标** @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;}
}

 

<com.tianxinyw.mapclient.views.CheckViewandroid:id="@+id/mycheckview"android:layout_width="100dp"android:layout_height="35dp"android:layout_marginRight="6dp"kongqw:text_size="20dp"kongqw:line_num="7"kongqw:point_num="100"kongqw:bg_color="#3B88DA"/>

 

mycheckview.invaliChenkCode(7+"—"+2+"="+"?");

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/415207.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

腾讯地图 qq.map 设置鼠标样式

腾讯地图设施鼠标样式我暂时没有找到直接的方法&#xff0c;但是它有一个属性可以控制draggableCursor,draggingCursor。直接修改地图实例的属性&#xff0c;就可以实现修改样式。 官方参考文章&#xff1a;http://open.map.qq.com/javascript_v2/doc/mapoptions.html 我的代…

pandas学习笔记——阅读官方文档

1. 初始化 &#xff08;1&#xff09;生成简单序列pd.Series >>>s pd.Series([1,3,5,np.nan,6,8]) >>>s 0 1.0 1 3.0 2 5.0 3 NaN #注意空 4 6.0 5 8.0 dtype: float64 &#xff08;2&#xff09;生成日期序列pd.date_range >>&g…

Android 抖动提示动画

左右抖动ObjectAnimator animator ObjectAnimator.ofFloat(textView, "translationX", 0, 100, -100,0); animator.setDuration(200); animator.start(); 重复左右抖动 Animation translateAnimation new TranslateAnimation(-20, 20, 0, 0); translateAnimation.…

工作173:数组转换为对象

var fruits [“banana”, “apple”, “orange”, “watermelon”]; var fruitsObj { …fruits }; console.log(fruitsObj);// returns {0: “banana”, 1: “apple”, 2: “orange”, 3: “watermelon”,4: “apple”, 5: “orange”, 6: “grape”, 7: “apple”}

文件树的功能整理

我的需求是实现一个文件树&#xff0c;需要对原始数据结构进行处理&#xff0c;返回前端需要的数据。 1、mongodb数据库中存放的原始数据&#xff1a; let fData [{"pid": null,"_id": "5e847c7f11228f1e88095dda","name": "公…

JavaScript的基本语法

1.JavaScript中的表示符合保留关键字&#xff1a;JavaScript中定义的符号必须以字母&#xff0c;下划线_或美元符$开始&#xff0c;其他字符可以是字母数字&#xff0c;下划线或者美元符。如变量名&#xff0c;函数名等。但是&#xff0c;标识符不能是JavaScript中的保留关键字…

Android 视频播放器,VideoView播放视频

实现demo&#xff1a;https://download.csdn.net/download/meixi_android/13729352 获取视频时长 delyedTime videoView.getDuration();//单位毫秒&#xff08;ms&#xff09; 引入视频模块 implementation project(:dkplayer-java) implementation project(:dkplayer-ui)视…

工作174:数组转换为对象项目案例

/* getAction("/task",).then(res>{console.log(res)let List[]res.data.items.map((value,index)>{/!* console.log(value.task_recode)*!/List.push({...value.task_recode})})this.tableDataListconsole.log(this.tableData)})*/ 本次直接处理 转换为数…

JDK8和JDK1.8有何区别

通常所说的JDK8和JDK1.8是同一个意思。

【NOIP 2017】列队

Description Sylvia 是一个热爱学习的女♂孩子。 前段时间&#xff0c;Sylvia 参加了学校的军训。众所周知&#xff0c;军训的时候需要站方阵。 Sylvia 所在的方阵中有nm名学生&#xff0c;方阵的行数为 n&#xff0c;列数为 m。 为了便于管理&#xff0c;教官在训练开始时&…

AAPT2 error: check logs for details.

/1、全部替代你的项目build.gradle内容&#xff1a; // Top-level build file where you can add configuration options common to all sub-projects/modules.buildscript {repositories { // maven { // url https://maven.google.com // }mavenCe…

工作175:数据在表格横坐标动态显示

1数据格式 2对数据进行处理 created() {getAction("/task/arrange").then(res>{console.log(res)this.tableDatares.data.itemsthis.timeres.data.timeconsole.log(this.time)res.data.time.map((value,index)>{console.log(value)let arr {prop:,label:value.…

mac安装mysql记录,使用zsh

1、正常安装去官网下载最新版&#xff0c;依次下一步就可以。 2、配置zsh 执行vim ~/.zshrc_profil 添加mysql/bin的目录&#xff1a; export PATH$PATH:/usr/local/mysql/bin添加完成后:wq保存 最后在命令行输入source ~/.zshrc_profile&#xff0c;执行脚本。 3、连接数…

vue中的ES6语法整理1

1、箭头函数 ES6允许使用“箭头”&#xff08;>&#xff09;定义函数 var f v > v;//等价于var f function(v){return v; }; 如果箭头函数不需要参数&#xff0c;则定义如下&#xff1a; var f () > 5; // 等同于 var f function () { return 5 }; 如果箭头函…

Android 生成二维码,条形码,二维码添加logo

zxing生成二维码 implementation com.google.zxing:core:3.3.1 implementation(name: zxing-1.0.1, ext: aar) implementation com.github.bumptech.glide:glide:4.9.0 annotationProcessor com.github.bumptech.glide:compiler:4.9.0 private Bitmap getCodeBitmap(String c…

java setDataSource 报红

开始学习spring security遇到一个问题&#xff0c;setDataSource老是报红 解决方案&#xff0c;在pom.xml中增加 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId><version>2…

Android 识别图片二维码,以及设置状态栏颜色

zxing依赖&#xff1a;compile cn.yipianfengye.android:zxing-library:2.2 初始化&#xff1a;private String SAVE_PIC_PATH Environment.getExternalStorageState().equalsIgnoreCase(Environment.MEDIA_MOUNTED)? Environment.getExternalStorageDirectory().getAbsolute…