1. 程式人生 > >自定義控制元件起步(四)--自定義驗證碼(下)

自定義控制元件起步(四)--自定義驗證碼(下)

接著上一篇,遺留了幾個問題,年分別去解決

1,我們先新增一個自定義屬性   驗證碼的數值型別

      <attr name="security_text_type" format="enum">
            <enum name="number" value="1" />
            <enum name="letter" value="2" />
        </attr>
在佈局檔案上新增:
        dsecurity:security_text_type="number"
在構造方法中獲取這個屬性值
security_text_type = typedArray.getString(R.styleable.securitycode_security_text_type);
2.現在已經確定驗證碼的型別是字母還是數字了,接下來我們為他設定點選監聽

   同樣是在構造方法中設定,並讓這個類實現OnClickListener

setOnClickListener(this);
   重寫onClick方法
       	@Override
	public void onClick(View v) {// 根據隨機數來設定驗證碼
		security_text = getRandomText();//獲取隨機碼
		onMeasure(0, 0);//重新測量
		postInvalidate();//重新整理介面
	}
注意:  為什麼要重新測量?小寫字母和大寫字母佔的位置不一樣  就需要重新測量

3.來看下獲取驗證碼的方法

先建立一個存放驗證碼的變數並在構造方法中建立物件

         private StringBuffer randomText;
獲取驗證碼
          private int[] defrence = { 65, 97 };//asc碼的差值   65是大寫的A  97是a
          private String getRandomText() {
		randomText.delete(0, randomText.length());//先清空
  		Random random = new Random();//建立一個Random物件
		for (int i = 0; i < 4; i++) {//迴圈4次  每次往randomText中新增一個字元
			if (TextUtils.equals("1", security_text_type)) {//如果驗證碼的型別是1(數字)
				randomText.append(random.nextInt(10));//每次新增一個數字進去
			} else {//不然  型別就是字母    
				char zimu = (char) (random.nextInt(26) + defrence[random
						.nextInt(2)]);
				randomText.append(zimu);
			}
		}
		return randomText.toString();
	}
4.新增一個驗證碼改變的監聽
       public void setOnSecurityClickListener(OnSecurityChangedListener listener) {
		this.listener = listener;
	}

	private OnSecurityChangedListener listener;

	public interface OnSecurityChangedListener {
		void onChanged(String security_text);
	}
在點選事件的onClick方法中呼叫
          if (listener != null) {// 設定驗證碼改變的監聽
			listener.onChanged(security_text);
		}
5.在MainActivity中測試一下
         	SecurityCodeView security_code = (SecurityCodeView) findViewById(R.id.security_code);
                security_code.setOnSecurityClickListener(new OnSecurityChangedListener() {
			@Override
			public void onChanged(String security_text) {
			    Toast.makeText(MainActivity.this,"驗證碼更改為:" + security_text, Toast.LENGTH_SHORT).show();
			}});
6.給這個佈局檔案中新增一個editext,並在MainActivity中新增一個文字改變的監聽
              editext = (EditText) findViewById(R.id.editext);
        editext.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before,
                    int count) {
                if (s.length() == 4) {
                    if (TextUtils.equals(s, security_code.getSecurityCode())) {
                        Toast.makeText(MainActivity.this, "驗證碼輸入正確",
                                Toast.LENGTH_SHORT).show();
                    } else {
                        Toast.makeText(MainActivity.this, "驗證碼輸入錯誤",
                                Toast.LENGTH_SHORT).show();
                    }
                }
            }
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
            }

            @Override
            public void afterTextChanged(Editable s) {
            }
        });
好了執行一下,看看效果

   

點選這裡下載原始碼

相關推薦

定義控制元件起步()--定義驗證()

接著上一篇,遺留了幾個問題,年分別去解決 1,我們先新增一個自定義屬性   驗證碼的數值型別 <attr name="security_text_type" format="enu

Android 定義控制元件起步定義TextView

首先我們看一下我們要達到的效果: 在點選我們自定義的View時文字會隨機改變。好,現在我們開始… 很多的Android入門程式猿來說對於Android自定義View,可能都是比較恐懼的,但是這又是高手進階的必經之路,所有準備在自定義View上面花

定義控制元件起步(三)--定義驗證(上)

自定義控制元件前兩篇主要介紹了自定義控制元件的步驟和自定義屬性,這篇我門來寫一個自定義驗證碼 首先,先分析分析我門需要什麼:       自定義驗證碼,我門需要先畫一段文字,準確的說是四個數字或字母,

WPF定義控制元件)の定義控制元件

原文: WPF自定義控制元件(四)の自定義控制元件 在實際工作中,WPF提供的控制元件並不能完全滿足不同的設計需求。這時,需要我們設計自定義控制元件。 這裡LZ總結一些自己的思路,特性如下: Coupling UITemplate Behaviour Function Package

定義控制元件裡面使用定義屬性,出現錯誤Can't convert value at index 0 to color: type=0x5

首先背景是eclipse的專案轉到Androidstudio上來,as的版本是3.0以上的,然後新建專案,複製貼上xxx的,首先出了個問題,佈局檔案說有錯,需要正確build才行,有毒,坑的很,重啟as才搞定。(對了,因為新版的as新建佈局,都是用的constrantlayo

Android定義控制元件佈局重新整理定義控制元件回到初始位置問題的解決

在闡述我所遇到的問題之前,先通過檢視Android原始碼發現這樣幾個程式碼樣例: 1.  grep extends\ ViewGroup.MarginLayoutParams ./core/java/android/widget/ -rn ./core/java/andr

Android定義控制元件封裝之定義屬性的實現

在開發中有時候我們需要去自定義一些組合控制元件,而在使用過程中,又想要自己的組合控制元件能有原生控制元件那樣可以在xml中使用屬性控制,那麼我們就需要去自定義一些屬性了 1:首先在values/attrs.xml中進行屬性的定義 <?xml version="1.

android定義控制元件_完全定義控制元件定義開關)

前面總結到自定義控制元件分為 組合控制元件 繼承已有控制元件 比如自定義SmartImageView繼承ImageView 完全自定義控制元件 上一篇寫了自定義控制元件的自定義屬性深入理解點選連結檢視,是自定控制元件比較難以理解的地方,但是是很重

Android定義控制元件2:定義劃線的文字或按鈕、組合使用可切換tab

package com.custom.controls.button; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Color; import android.u

[WPF定義控制元件] 開始一個定義控制元件庫專案

1. 目標 我實現了一個自定義控制元件庫,並且打算用這個控制元件庫作例子寫一些部落格。這個控制元件庫主要目標是用於教學,希望通過這些部落格初學者可以學會為自己或公司建立自定義控制元件,並且對WPF有更深入的瞭解。 控制元件庫已放在Github上,並且也以釋出到NuGet。 現階段我的目標是實現一些簡單的控

定義控制元件三部曲檢視篇()——RecyclerView系列之一簡單使用

絕望的時候不要那麼絕望,高興的時候不要那麼高興,是你慢慢會學會的。 ——董卿 轉了一年多,又回來繼續做Android。果然還是看到程式碼最讓我興奮……但有些事,沒經歷過,總歸還是遺憾的。在VIVO的遊戲中心,有一個特別炫酷的功能: 這個功能就是使

定義控制元件學習筆記()文字的繪製

1 Canvas 繪製文字的方式 Canvas 的文字繪製方法有三個:drawText() drawTextRun() 和 drawTextOnPath()。 1.1 drawText(String text, float x, float y, Paint

定義控制元件之繪圖篇():canvas變換與操作

前言:前幾篇講解了有關canvas繪圖的一些操作,今天更深入一些,講講對畫布的操作,這篇文章不像前幾篇那麼容易理解,如果以前沒有接觸過畫布的童鞋可能比較難以理解,為什麼會這樣。我儘量多畫圖,讓大家更清晰明白。前幾天偶然看到一篇文章,寫的樸實無華,充滿正能量,我非常喜歡裡面的一

定義控制元件:一個簡單的定義控制元件例項

轉載請標明出處:http://blog.csdn.net/lmj623565791/article/details/24252901 很多的Android入門程式猿來說對於Android自定義View,可能都是比較恐懼的,但是這又是高手進階的必經之路,所有準備在

徹底搞懂定義控制元件中的個構造方法

    在上一篇部落格動手實現餅圖控制元件寫完以後,有些小夥伴說講得不夠細,建議從最基本開始講起,比如建構函式都是什麼?我覺得說得很有道理,正好自己也不夠了解自定義控制元件中的4個構造方法的具體呼叫時機和它們各自的引數作用,今天終於有時間把這部分內容進行學習整理,順便分享給那

C# PropertyGrid控制元件定義操作

1>PropertyGid 控制元件輸入時顯示隱藏密碼為(*) 單獨寫一個PasswordStringConverter 類; using System.ComponentModel; using System.Globalization;

Android定義控制元件系列案例【

案例效果: 模擬器上執行有些鋸齒,真機上和預期一樣好 案例分析: 看效果,第一直覺肯定是Android原生態控制元件中沒有這樣的控制元件實現這種效果,自然想到應該需要自定義控制元件了,沒錯,這就是通過自定義控制元件來繪製的一個圓環進度條。仔細分析發現這個效果的進度條應該

Android定義控制元件:進度條的種實現方式

Progress Wheel為GitHub熱門專案,作者是:Todd-Davies,專案地址: https://github.com/Todd-Davies/ProgressWheel 前三種實現方式程式碼出自: http://stormzhang.com/ope

十一)c#Winform定義控制元件-進度條

前提 入行已經7,8年了,一直想做一套漂亮點的自定義控制元件,於是就有了本系列文章。 開源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control 如果覺得寫的還行,請點個 star 支援一下吧 歡迎前來交流探討: 企鵝群568015492&n

十二)c#Winform定義控制元件-進度條擴充套件

前提 入行已經7,8年了,一直想做一套漂亮點的自定義控制元件,於是就有了本系列文章。 GitHub:https://github.com/kwwwvagaa/NetWinformControl 碼雲:https://gitee.com/kwwwvagaa/net_winform_custom_contr