簡(jiǎn)單實(shí)現(xiàn)Android驗(yàn)證碼
安卓驗(yàn)證碼的簡(jiǎn)單實(shí)現(xiàn)
我們經(jīng)常在登錄或者注冊(cè)的時(shí)候要求輸入驗(yàn)證碼,這里簡(jiǎn)單介紹一下一種方法
效果如下
首先是要獲取 隨機(jī)的四個(gè)字母組合,我這里是將26個(gè)字母存儲(chǔ)到一個(gè)數(shù)組中,然后隨機(jī)生成4個(gè)下標(biāo)值,取這四個(gè)下標(biāo)值對(duì)應(yīng)的字母作為驗(yàn)證碼。
public class RandomChars { char[] chars; public RandomChars() { chars = new char[26]; for (int i = 0; i < 26; i++) { chars[i] = (char) (i + 65); } } public char[] get4Chars() { char[] rlt = new char[4]; for (int i = 0; i < rlt.length; i++) { int randomIndex = (int) (Math.random() * 26); rlt[i] = chars[randomIndex]; } return rlt; } }
自定義一個(gè)CodeView進(jìn)行驗(yàn)證碼的繪制,主要在onDraw方法中操作,學(xué)藝不精,還不能好好在onMeasure中控制大小位置等。
float unitWidth = (float) getWidth() / (float) chars.length; for (int i = 0; i < chars.length; i++) { String str = chars[i] + ""; textPaint.getTextBounds(str, 0, str.length(), mRect); resetColor(); int angel = (int) (Math.random()*(8-(-8)+1)+(-8)); canvas.rotate(angel);//旋轉(zhuǎn)字母,隨機(jī)角度 canvas.drawText(str, i * unitWidth + 5, getHeight() / 2 - mRect.centerY(), textPaint); /** * 很關(guān)鍵,旋轉(zhuǎn) */ canvas.save();//保存狀態(tài) canvas.restore();//恢復(fù) } /** * 重新設(shè)置隨機(jī)顏色 */ private void resetColor() { int r = (int) (Math.random() * 230 - 30); int g = (int) (Math.random() * 230 - 30); int b = (int) (Math.random() * 230 - 30); textPaint.setColor(Color.rgb(r, g, b)); }
設(shè)置該控件并傳入四個(gè)字符就ok了,驗(yàn)證是否輸入正確的時(shí)候,考慮到大小寫(xiě)問(wèn)題,所以將輸入的字母全部轉(zhuǎn)換成大寫(xiě),一般都是不區(qū)分大小寫(xiě)。
submit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String inputStr = input.getText().toString(); inputStr = inputStr.toUpperCase(); str = str.toUpperCase(); if (str.equals(inputStr)) { Toast.makeText(MainActivity.this, "輸入正確", Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(MainActivity.this, "驗(yàn)證碼輸入錯(cuò)誤", Toast.LENGTH_SHORT).show(); char[] getchar = randomChars.get4Chars(); str = new String(getchar); codeView.setChars(getchar); } } });
感覺(jué)還有挺多不足的地方,以后繼續(xù)改進(jìn)吧!
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android獲取驗(yàn)證碼倒計(jì)時(shí)顯示效果
- Android自定義View繪制隨機(jī)生成圖片驗(yàn)證碼
- Android實(shí)現(xiàn)短信驗(yàn)證碼自動(dòng)填寫(xiě)
- Android采取ContentObserver方式自動(dòng)獲取驗(yàn)證碼
- Android短信驗(yàn)證碼自動(dòng)填充功能
- Android實(shí)現(xiàn)短信驗(yàn)證碼獲取自動(dòng)填寫(xiě)功能(詳細(xì)版)
- Android注冊(cè)登錄實(shí)時(shí)自動(dòng)獲取短信驗(yàn)證碼
- Android開(kāi)發(fā)工程中集成mob短信驗(yàn)證碼功能的方法
- Android手機(jī)號(hào)注冊(cè)、綁定手機(jī)號(hào)獲取短信驗(yàn)證碼實(shí)例
- Android獲取和讀取短信驗(yàn)證碼的實(shí)現(xiàn)方法
相關(guān)文章
Kotlin中l(wèi)et()with()run()apply()also()函數(shù)的使用方法與區(qū)別
在Kotlin中的源碼標(biāo)準(zhǔn)庫(kù)(Standard.kt)中提供了一些Kotlin擴(kuò)展的內(nèi)置函數(shù)可以優(yōu)化kotlin的編碼,今天為大家聊聊let,with,run,apply,also幾個(gè)函數(shù)的用法與區(qū)別2018-03-03RxJava+Retrofit實(shí)現(xiàn)網(wǎng)絡(luò)請(qǐng)求封裝的方法
Retrofit是當(dāng)前應(yīng)用非常廣泛的網(wǎng)絡(luò)請(qǐng)求框架,通常結(jié)合RxJava來(lái)進(jìn)行網(wǎng)絡(luò)請(qǐng)求,本文將展示一個(gè)采用RxJava+Retrofit的網(wǎng)絡(luò)請(qǐng)求demo,感興趣的可以了解一下2019-04-04Android進(jìn)階之Spinner下拉框的使用方法
這篇文章主要為大家詳細(xì)介紹了Android進(jìn)階之Spinner下拉框的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12android開(kāi)機(jī)自啟動(dòng)APP及使用adb命令測(cè)試方法
今天小編就為大家分享一篇android開(kāi)機(jī)自啟動(dòng)APP及使用adb命令測(cè)試方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08Android seekbar實(shí)現(xiàn)可拖動(dòng)進(jìn)度條
這篇文章主要為大家詳細(xì)介紹了Android seekbar實(shí)現(xiàn)可拖動(dòng)進(jìn)度條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-01-01Android實(shí)現(xiàn)隱私政策彈窗與鏈接功能
現(xiàn)在幾乎所有的應(yīng)用市場(chǎng)都要求應(yīng)用上架需要用戶協(xié)議/隱私政策,本篇內(nèi)容將介紹如何在APP內(nèi)植入一個(gè)隱私政策彈窗與鏈接,對(duì)Android隱私政策彈窗實(shí)現(xiàn)代碼感興趣的朋友跟隨小編一起看看吧2021-07-07