Android開發(fā)正式學(xué)習(xí)Day2(2019-8-26) 頁面布局臼朗、圖案解鎖(1)

目的:

掌握安卓開發(fā)中的基本布局,通過寫圖案解鎖小demo來熟悉一些控件用法蝎土。

技術(shù)及使用:

1.布局

所有的布局類里面都維護(hù)一個LayoutParams extends MarginLayoutParmas
用于管理當(dāng)前這個布局容器子控件的布局

(1)線性布局LinearLayout

LinearLayout: LinearLayout.LayoutParams
Margin:控件邊緣和其他控件的間距- 外間距
Padding:控件內(nèi)部和自己邊緣的間距- 內(nèi)間距


Margin视哑、Padding圖示
線性布局的方向:
Orientation:Vertical縱向 Horizontal橫向
左邊距
layout_marginLeft
layout_marginStart
右邊距
layout_marginRight
layout_marginEnd
上邊距
layout_marginTop
下邊距
layout_marginBottom
權(quán)重按比例分配
layout_weight

(2)相對布局RelativeLayout

相對布局:必須能夠確定每個控件的x y w h
RelativeLayout 
在MarginLayout的基礎(chǔ)上添加了對?
當(dāng)前這個控件和id為v1的控件右邊對?

layout_alignRight = “@id/v1”
layout_alignLeft = “@id/v1”
layout_alignTop = “@id/v1”
layout_alignBottom = “@id/v1”

(3)約束布局ConstraintLayout

v1添加約束

<View
        android:id="@+id/v1"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="@color/colorAccent"

        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@id/v2"
        app:layout_constraintHorizontal_weight="1"

        android:layout_marginLeft="20dp"
        android:layout_marginTop="20dp"
        android:layout_marginRight="20dp"
        android:layout_marginBottom="20dp"/>

v2添加約束

    <View
        android:id="@+id/v2"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="@color/colorPrimary"

        app:layout_constraintTop_toTopOf="@+id/v1"
        app:layout_constraintBottom_toBottomOf="@+id/v1"
        app:layout_constraintStart_toEndOf="@+id/v1"
        app:layout_constraintEnd_toEndOf="parent"
        android:layout_marginRight="20dp"
        app:layout_constraintHorizontal_weight="1"
        />
寬??例
layout_constraintDimensionRatio="h,1^2" 寬和?的?例
layout_constraintDimensionRatio=“w,1^2” ?和寬的?例

2.開發(fā)路線:

Xml文件設(shè)置容器為RelativeLayout

添加ID

添加子控件

 <!--背景圖片-->
   <ImageView
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:src="@drawable/main_bg"
       android:scaleType="fitXY"
       />

    <!--9個點(diǎn)的背景圖片-->
    <ImageView
        android:id="@+id/opView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/op_bg"
        android:layout_centerInParent="true"/>

實(shí)際使用:

制作圖案解鎖(大致思路):

  1. 添加控件 9個點(diǎn) 圖片 20條線 圖片
  2. ImageView顯示圖片
  3. 容器來管理子控件:
  4. 子觸摸事件
  5. 點(diǎn)亮:取消隱藏
  6. 記錄密碼
@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坐標(biāo)
            int x = iv.getLeft();
            int y = iv.getTop();

            float scale = getResources().getDisplayMetrics().density;
                //創(chuàng)建橫線 6條
                for (int i = 0; i < 2; i++) {
                    for (int j = 0; j < 3; j++) {
                        //創(chuàng)建一個視圖用于顯示圖
                        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);
                        params.leftMargin = (int) (x + 46.7 * scale) + (int) (99 * scale * i);
                        params.topMargin = (int) (y + 170 * scale) + (int) (99 * scale * j);

                        rl.addView(lineView, params);
                    }
                }

            //創(chuàng)建豎線 6條
            for (int i = 0; i < 3; i++) {
                for (int j = 0; j < 2; j++) {
                    //創(chuàng)建一個視圖用于顯示圖
                    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);
                    params.leftMargin = (int) (x + 42 * scale) + (int) (99 * scale * i);
                    params.topMargin = (int) (y + 170 * scale) + (int) (99 * scale * j);

                    rl.addView(lineView, params);
                }
            }

            //創(chuàng)建斜線1  4條
            for (int i = 0; i < 2; i++) {
                for (int j = 0; j < 2; j++) {
                    //創(chuàng)建一個視圖用于顯示圖
                    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);
                    params.leftMargin = (int) (x + 49 * scale) + (int) (99 * scale * i);
                    params.topMargin = (int) (y + 170 * scale) + (int) (99 * scale * j);

                    rl.addView(lineView, params);
                }
            }

            //創(chuàng)建斜線2  4條
            for (int i = 0; i < 2; i++) {
                for (int j = 0; j < 2; j++) {
                    //創(chuàng)建一個視圖用于顯示圖
                    ImageView lineView = new ImageView(this);
                    //設(shè)置圖片
                    lineView.setBackgroundResource(R.drawable.normal_highlight4);

                    //創(chuàng)建布局參數(shù)
                    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
                            ViewGroup.LayoutParams.WRAP_CONTENT,
                            ViewGroup.LayoutParams.WRAP_CONTENT);
                    params.leftMargin = (int) (x + 53.3 * scale) + (int) (99 * scale * i);
                    params.topMargin = (int) (y + 170 * scale) + (int) (99 * scale * j);

                    rl.addView(lineView, params);
                }
            }

            //創(chuàng)建9個點(diǎn)
            for (int i = 0; i < 3; i++) {
                for (int j = 0; j < 3; j++) {
                    //創(chuàng)建用于顯示點(diǎn)的視圖
                    ImageView dotView = new ImageView(this);
                    //隱藏視圖
                    dotView.setVisibility(View.VISIBLE);
                    //顯示對應(yīng)的圖片
                    dotView.setBackgroundResource(R.drawable.selected_dot);
                    //創(chuàng)建控件的尺寸
                    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
                            ViewGroup.LayoutParams.WRAP_CONTENT,
                            ViewGroup.LayoutParams.WRAP_CONTENT);
                    params.leftMargin = (int) (x + 35 * scale) + (int) (99 * scale * i);
                    params.topMargin = (int) (y + 163 * scale) + (int) (99 * scale * j);

                    //將控件添加到容器中
                    rl.addView(dotView, params);
                }
            }
            //監(jiān)聽觸摸事件 onTouchEvent
        }
        }

大致效果:

大致效果

存在問題:

橫屏的話中間的解鎖板塊會錯亂。

心得體會:

今天學(xué)習(xí)了幾種布局誊涯,后面在制作解鎖demo中很多控件還不是很了解挡毅,但是思路還算比較清晰,希望在今后的學(xué)習(xí)能夠熟悉掌握這些控件暴构。還有在調(diào)試圖片位置時屬實(shí)不容易跪呈,不過還是比較有意思。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末取逾,一起剝皮案震驚了整個濱河市耗绿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌砾隅,老刑警劉巖误阻,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異晴埂,居然都是意外死亡究反,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門儒洛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來精耐,“玉大人,你說我怎么就攤上這事琅锻】钗ィ” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵松却,是天一觀的道長芥映。 經(jīng)常有香客問我,道長滚秩,這世上最難降的妖魔是什么专执? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮郁油,結(jié)果婚禮上本股,老公的妹妹穿的比我還像新娘。我一直安慰自己桐腌,他們只是感情好拄显,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著案站,像睡著了一般躬审。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蟆盐,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天承边,我揣著相機(jī)與錄音,去河邊找鬼石挂。 笑死博助,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的痹愚。 我是一名探鬼主播富岳,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼拯腮!你這毒婦竟也來了窖式?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤疾瓮,失蹤者是張志新(化名)和其女友劉穎脖镀,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體狼电,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蜒灰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了肩碟。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片强窖。...
    茶點(diǎn)故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖削祈,靈堂內(nèi)的尸體忽然破棺而出翅溺,到底是詐尸還是另有隱情脑漫,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布咙崎,位于F島的核電站优幸,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏褪猛。R本人自食惡果不足惜网杆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望伊滋。 院中可真熱鬧碳却,春花似錦、人聲如沸笑旺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽筒主。三九已至关噪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間物舒,已是汗流浹背色洞。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留冠胯,地道東北人火诸。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像荠察,于是被迫代替她去往敵國和親置蜀。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評論 2 348

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

  • 目的: 通過學(xué)習(xí)布局類等方面的知識點(diǎn)悉盆,以及控件的使用來完成圖案解鎖的功能盯荤。 技術(shù): 1.布局類: 所有的布局類?面...
    我也不知道_2c95閱讀 394評論 0 1
  • 布局——手勢解鎖 目錄 布局 線性布局(LinearLayout ) 相對布局(RelativeLayout ) ...
    開心的碼字達(dá)閱讀 413評論 0 4
  • 學(xué)習(xí)目的 學(xué)習(xí)新的Android開發(fā)相關(guān)知識,并通過代碼實(shí)現(xiàn)圖案解鎖功能 相關(guān)技術(shù)焕盟、及其使用 注意:在界面上添加控...
    黑鐵選手閱讀 861評論 0 2
  • 不顧自己的生命秋秤,還要拉上14人一起陪死。劉姓女人在無理的前提下脚翘,竟然在公交車上毆打司機(jī)灼卢,導(dǎo)致司機(jī)還手,最終使公交車...
    春燕子閱讀 82評論 0 0
  • 孤云將野鶴来农,豈向人間住鞋真。 莫買沃洲山,時人已知處沃于。
    5562d88ec370閱讀 616評論 0 0