源碼簡介

注意:本項目使用android studio開發,eclipse可能無法直接導入。
很多品牌的Android手機都實現了圖案解鎖屏幕的功能,有些應用程序出于保護的目的也使用了圖案鎖(比如支付寶),本文將介紹一種圖案鎖的實現方式,這種實現的一個優勢在于方便擴展和自定義,我們先看一下效果圖。
  首先是連線階段,整個連線為兩部分:第一部分是點和點之間的固定線段,第二部分是最后一個點到鼠標移動位置的自由線段。

接下來是連線結束之后,需要判斷圖案是否正確,我這里暫時寫死的Z字形為正確圖案,實際應用時需要記錄用戶的輸入為設置的圖案密碼。

首先我們考慮在哪里完成點和線的繪圖。通常我們想到的是寫一個自定義的View(即繼承自View類),添加onTouchEvent進行控制,同時覆寫onDraw()方法,完成繪制。不過我這里沒有采用這種方式,考慮到onTouchEvent只能接收在View之上的觸摸事件,從上面第一張圖中可以看出,如果文字和自定義View平鋪擺放的話,那么當手指滑動到文字上面的時候,已經超出了自定義View的范圍,因此無法響應觸摸事件。雖說有一種補救方式,就是讓其他控件和自定義View疊在一起,即擺放在一個FrameLayout里面,不過幀布局對控件位置的控制不像RelativeLayout這樣靈活,因此我的實現方式是自定義RelativeLayout,并且在dispatchDraw()方法里,完成點和線的繪制。dispatchDraw()會在布局繪制子控件時調用,具體的可以參考谷歌官方文檔。
  首先需要有一個類來記錄九個圓點的基本信息。我們可以視為這九個圓是分布于3*3的方格子里面,其中每一個圓位于方格子的中心,在繪制這些圓時,有以下基本信息是要知道的:
1、這些方格子的位置(左上角的X,Y坐標)
2、方格子的邊長有多大?
3、方格子的邊到圓的邊有多大的間隔?
4、圓心的位置(圓心X,Y坐標)
5、圓的半徑是多少?
6、這個圓當前應該顯示什么顏色?(即圓點的狀態)
7、由于我們不可能記錄圖案整體,而是記錄連接點的順序,那么這個圓所表示的密碼值是多少?
  不過上面這7個值是相互依賴的,比如我知道了1和2,就能知道4;知道了2和3,就能知道5。因此,在定義這些值的時候,應當讓用戶提供充分但不沖突的信息(比如我這里從外部獲取的是1、2、3、6、7,而4和5是算出來的)。我在實現的時候,把定義下來就再也用不到的信息寫在了一個類里面,把繪制點時還需要獲取的信息寫在了另一個類里面,并且這個類提供了一些外部調用的方法(實際上這兩個類合二為一是完全合理的)

原文鏈接:http://blog.csdn.net/liusiqian0209/article/details/50372448
www.pjiawz.live之前也介紹過關于九宮格圖案鎖的項目源碼,感興趣的可以在www.pjiawz.live搜索“九宮格”就可以找到。

Android項目源碼手機九宮格圖案鎖的實現 Android項目源碼手機九宮格圖案鎖的實現

1條源碼討論
發表評論

您必須登錄才能評論.

沙發 lilionufo 2016-07-11 上午10:52

多謝分享~

?2013-2019 JavaApk.com· 魯ICP備13032311號-1· Powered by WordPress· Theme by JavaApkTM · 網站地圖.19 queries in 0.058 seconds


竟彩足球比分直播