Android之圖案解鎖

目的

在AndroidStudio里實(shí)現(xiàn)圖案解鎖

要實(shí)現(xiàn)的基本功能

添加背景圖片,添加一些線岳链,在界面上顯示出來(lái)的是已經(jīng)畫(huà)好了的圖案

具體實(shí)現(xiàn)

1.在xml文件中設(shè)置背景圖片和9個(gè)點(diǎn)的圖片

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:id="@+id/root_layout">

<!--背景圖片-->
<ImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:src="@drawable/main_bg"
    android:scaleType="fitXY"/>
<!--九個(gè)點(diǎn)的背景圖片-->
<ImageView
    android:id="@+id/opView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:src="@drawable/op_bg"
    android:layout_centerInParent="true"
    />
</RelativeLayout>

2.重寫(xiě)onWindowFocusChanged方法花竞,獲取背景圖片劲件,創(chuàng)建橫豎線和斜線并設(shè)置他們的xy值掸哑,可以根據(jù)所需設(shè)置

public class MainActivity extends AppCompatActivity {
@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    //判斷是否已經(jīng)顯示
    if (hasFocus){
        //獲取容器
        RelativeLayout rl=findViewById(R.id.root_layout);
        //獲取背景視圖
        ImageView iv=findViewById(R.id.opView);
        //獲取x,y
        int x=iv.getLeft();
        int y=iv.getTop();
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                //創(chuàng)建用于顯示點(diǎn)的視圖
                ImageView dotView=new ImageView(this);
                //顯示對(duì)應(yīng)的圖片
                dotView.setBackgroundResource(R.drawable.selected_dot);
                //創(chuàng)建控件的尺寸
                RelativeLayout.LayoutParams params=new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);
                float scale=getResources().getDisplayMetrics().density;
                params.leftMargin=(int)(x+42*scale)+(int)(112*scale*i);
                params.topMargin=(int)(y+279*scale)+(int)(112*scale*j);
                System.out.println("zyx"+scale);
                //背景視圖的尺寸
                //將控件添加到容器
                rl.addView(dotView,params);
            }
        }
        //創(chuàng)建六條橫線
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 2; j++) {
                //創(chuàng)建一個(gè)視圖用于顯示線
                ImageView lineView=new ImageView(this);
                //設(shè)置圖片
                lineView.setBackgroundResource(R.drawable.normal_highlight1);
                //創(chuàng)建布局參數(shù)
                RelativeLayout.LayoutParams params=new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);
                //設(shè)置x零远,y
                float scale=getResources().getDisplayMetrics().density;
                params.leftMargin = (int) ((int) (x + 54* scale) + (114 * scale * j));
                params.topMargin = (int) ((int) (y + 282* scale) +  (114 * scale * i));
                rl.addView(lineView,params);
            }
        }
        //創(chuàng)建豎線
        for (int I = 0; I < 2; I++) {
            for (int j = 0; j < 3; j++) {
                //創(chuàng)建一個(gè)視圖用于顯示線
                ImageView lineView = new ImageView(this);
                //設(shè)置圖片
                lineView.setBackgroundResource(R.drawable.normal_highlight2);
                //創(chuàng)建布局參數(shù)
                RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
                //設(shè)置下苗分,x,y
                float scale = getResources().getDisplayMetrics().density;
                params.leftMargin = (int) ((int) (x + 50* scale) + (114 * scale * j));
                params.topMargin = (int) ((int) (y + 292* scale) +  (114 * scale * I));
                rl.addView(lineView,params);
            }
        }
        //創(chuàng)建右斜線
        for (int I = 0; I < 2; I++) {
            for (int j = 0; j < 2; j++) {
                //創(chuàng)建一個(gè)視圖用于顯示線
                ImageView lineView = new ImageView(this);
                //設(shè)置圖片
                lineView.setBackgroundResource(R.drawable.normal_highlight3);
                //創(chuàng)建布局參數(shù)
                RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
                //設(shè)置x,y
                float scale = getResources().getDisplayMetrics().density;
                params.leftMargin = (int) ((int) (x + 40 * scale) + (110 * scale * j));
                params.topMargin = (int) ((int) (y + 282 * scale) + (110 * scale * I));
                rl.addView(lineView, params);
                //創(chuàng)建一個(gè)視圖用于顯示線
                ImageView lineView2 = new ImageView(this);
                //設(shè)置圖片
                lineView2.setBackgroundResource(R.drawable.normal_highlight4);
                params.leftMargin = (int) ((int) (x + 80 * scale) + (114 * scale * j));
                params.topMargin = (int) ((int) (y + 282 * scale) + (114 * scale * I));
                rl.addView(lineView2, params);
            }
        }
    }
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}
小結(jié)

今天所學(xué)確實(shí)有些復(fù)雜,要設(shè)置很多東西牵辣,但是很多其實(shí)都差不多摔癣,就像x和y的設(shè)置,后面還會(huì)設(shè)置觸摸,能用手實(shí)現(xiàn)圖案解鎖择浊,而不是這樣已經(jīng)固定好了的圖案戴卜,期待這個(gè)功能完整之后的app

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市琢岩,隨后出現(xiàn)的幾起案子投剥,更是在濱河造成了極大的恐慌,老刑警劉巖担孔,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件糕篇,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡挑豌,警方通過(guò)查閱死者的電腦和手機(jī)墩崩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門债蓝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)盛龄,“玉大人,你說(shuō)我怎么就攤上這事余舶。” “怎么了赠制?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵钟些,是天一觀的道長(zhǎng)绊谭。 經(jīng)常有香客問(wèn)我,道長(zhǎng)达传,這世上最難降的妖魔是什么迫筑? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任脯燃,我火速辦了婚禮,結(jié)果婚禮上曲伊,老公的妹妹穿的比我還像新娘坟募。我一直安慰自己邑狸,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布赚哗。 她就那樣靜靜地躺著硅堆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪够掠。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,688評(píng)論 1 305
  • 那天疯潭,我揣著相機(jī)與錄音面殖,去河邊找鬼。 笑死相叁,一個(gè)胖子當(dāng)著我的面吹牛辽幌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播舶衬,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了舞蔽?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤渗柿,失蹤者是張志新(化名)和其女友劉穎朵栖,沒(méi)想到半個(gè)月后陨溅,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體绍在,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年臼寄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吉拳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片适揉。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡涡扼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出汤善,到底是詐尸還是另有隱情票彪,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布在旱,位于F島的核電站推掸,受9級(jí)特大地震影響驻仅,放射性物質(zhì)發(fā)生泄漏噪服。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一粘优、第九天 我趴在偏房一處隱蔽的房頂上張望雹顺。 院中可真熱鬧廊遍,春花似錦、人聲如沸昧碉。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至闪金,卻和暖如春论颅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背漏设。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工郑口, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留盾鳞,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓乒裆,卻偏偏與公主長(zhǎng)得像推励,于是被迫代替她去往敵國(guó)和親肉迫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子惰蜜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • EnglishVersion ->_->:https://github.com/jiang111/awesome-...
    聶順閱讀 1,230評(píng)論 0 4
  • 學(xué)習(xí)目的 學(xué)習(xí)新的Android開(kāi)發(fā)相關(guān)知識(shí),并通過(guò)代碼實(shí)現(xiàn)圖案解鎖功能 相關(guān)技術(shù)鼻听、及其使用 注意:在界面上添加控...
    黑鐵選手閱讀 870評(píng)論 0 2
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,103評(píng)論 1 32
  • 楊凌撑教,讓我對(duì)大學(xué)有了最初的認(rèn)識(shí)醉拓,第一感覺(jué)是西農(nóng)好大亿卤,比初中高中大好多愤兵,各種植物秆乳,郁郁蔥蔥钻哩,將整個(gè)學(xué)校裝點(diǎn)的...
    一段路一種領(lǐng)悟_20ea閱讀 298評(píng)論 0 2
  • 【序言】 唐詩(shī)中“詠蟬”三絕的作者是虞世南街氢、駱賓王和李商隱。 清人施補(bǔ)華《峴傭說(shuō)詩(shī)》是這樣評(píng)論這三首詠蟬詩(shī):同一詠...
    白丙之閱讀 549評(píng)論 0 10