Android第二天

xml布局 布置一個圖案解鎖界面

內(nèi)容

1.添加控件 9個點 圖片 20條線 圖片
2.ImageView顯示圖片
3.容器來管理子控件

  • 布局:
    幀布局 FrameLayout
    線性布局 LinearLayout
    相對布局 RelativeLayout
    約束布局 ConstraintsLayout
    所有的布局類里面都維護一個LayoutParams
    extends MarginLayoutParams
    用于管理當前這個布局容器子控件的布局

技術

  • 線性布局 LinearLayout
    QQ圖片20190826194634.png

一個橫向線性布局
QQ圖片20190826195548.png

一個縱向線性布局
QQ圖片20190826195734.jpg
  • 約束布局
    一個約束布局
<View
        android:id="@+id/b"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="@color/colorPrimary"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toStartOf="@id/a"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        android:layout_marginStart="50dp"
        android:layout_marginRight="50dp"
        android:layout_marginTop="50dp"
        android:layout_marginBottom="50dp"
        app:layout_constraintHorizontal_weight="1"/>

    <View
        android:id="@+id/a"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="@color/colorAccent"
        app:layout_constraintStart_toEndOf="@id/b"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="@id/b"
        app:layout_constraintBottom_toBottomOf="@id/b"
        android:layout_marginEnd="50dp"
        android:layout_marginStart="50dp"
        app:layout_constraintHorizontal_weight="1"/>

效果
QQ圖片20190826200538.jpg
  • 相對布局
    相對布局:必須能夠確定每個控件的x y w h
    RelativeLayout
    在MarginLayout的基礎上添加了對齊

    當前這個控件和ID為v1的控件右邊對齊
    layout_align = "@id/v1"

  • 使用相對布局構(gòu)建圖案解鎖demo的背景


    QQ圖片20190826200955.png
  • 圖案解鎖demo的代碼

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;

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();

            // 獲取屏幕密度
            float density = getResources().getDisplayMetrics().density;



            // 創(chuàng)建豎線
            for (int i = 0; i < 2; i++) {
                for (int j = 0; j < 3; j++) {
                    // 創(chuàng)建一個視圖用于顯示線
                    ImageView lineView = new ImageView(this);
                    // 設置圖片
                    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*density+99*density*j) ;
                    params.topMargin = (int)(y + 170*density+99*density*i);

                    rl.addView(lineView,params);

                    System.out.println("n");
                }
            }

            // 創(chuàng)建橫線
            for (int i = 0; i < 3; i++) {
                for (int j = 0; j < 2; j++) {
                    ImageView lineView = new ImageView(this);
                    lineView.setBackgroundResource(R.drawable.normal_highlight1);

                    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

                    params.leftMargin = (int)(x + 46.6*density)+(int)(99*density*j);
                    params.topMargin = (int)(y + 170*density)+(int)(99*density*i);

                    rl.addView(lineView,params);
                }
            }

            // 創(chuàng)建斜線
            for (int i = 0; i < 2; i++) {
                for (int j = 0; j < 2; j++) {
                    // 創(chuàng)建一個視圖用于顯示線
                    ImageView lineView = new ImageView(this);
                    // 設置圖片
                    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 + 42*density)+(int)(99*density*j) ;
                    params.topMargin = (int)(y + 170*density)+(int)(99*density*i);

                    rl.addView(lineView,params);

                    ImageView LlineView = new ImageView(this);
                    // 設置圖片
                    LlineView.setBackgroundResource(R.drawable.normal_highlight4);
                    params.leftMargin =(int)(x + 53.3*density)+(int)(99*density*j) ;
                    params.topMargin = (int)(y + 164*density)+(int)(99*density*i);


                    rl.addView(LlineView,params);
                }
            }

            for (int i = 0; i < 3; i++) {
                for (int j = 0; j < 3; j++) {
                 // 創(chuàng)建用于顯示點的視圖
                    ImageView dotView = new ImageView(this);

                    // 顯示對應的圖片
                    dotView.setBackgroundResource(R.drawable.selected_dot);

                    // 隱藏視圖
                    dotView.setVisibility(View.INVISIBLE);

                    // 創(chuàng)建控件的尺寸
                    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);



                    params.leftMargin = (int)(x + 35*density)+(int)(99*density*i);
                    params.topMargin = (int)(y + 164*density)+(int)(99*density*j);


                    // 將控件添加到容器中
                    rl.addView(dotView,params);

                }
            }
        }
    }

    /**
     * 安卓 在容器中添加的控件需要被window計算/測量
     * window -> viewGroup  -> 子控件
     * 通常在onCreate秀菱、onStart振诬、onResume無法獲取到控件本身的尺寸
     * 所有的測量都是在另外一個線程操作
     * 如果想要獲取控件的尺寸
     */

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }
}

運行結(jié)果
QQ圖片20190826201710.jpg
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市衍菱,隨后出現(xiàn)的幾起案子赶么,更是在濱河造成了極大的恐慌,老刑警劉巖梦碗,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件禽绪,死亡現(xiàn)場離奇詭異,居然都是意外死亡洪规,警方通過查閱死者的電腦和手機斩例,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門念赶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人旗吁,你說我怎么就攤上這事停局。” “怎么了码倦?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵袁稽,是天一觀的道長擒抛。 經(jīng)常有香客問我,道長民泵,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任厢钧,我火速辦了婚禮,結(jié)果婚禮上早直,老公的妹妹穿的比我還像新娘。我一直安慰自己糕韧,他們只是感情好喻圃,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著雀扶,像睡著了一般愚墓。 火紅的嫁衣襯著肌膚如雪昂勉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天村象,我揣著相機與錄音谴返,去河邊找鬼。 笑死籍救,一個胖子當著我的面吹牛渠抹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播奇颠,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼烈拒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了荆几?” 一聲冷哼從身側(cè)響起吨铸,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤诞吱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后房维,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡晕鹊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了歌焦。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡屑墨,死狀恐怖纷铣,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情以躯,我是刑警寧澤啄踊,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布颠通,位于F島的核電站,受9級特大地震影響谨垃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜刘陶,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一易核、第九天 我趴在偏房一處隱蔽的房頂上張望浪默。 院中可真熱鬧纳决,春花似錦、人聲如沸阔加。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吭露。三九已至,卻和暖如春讲竿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背题禀。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留担孔,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓啄育,卻偏偏與公主長得像挑豌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子氓英,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

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

  • 今天Android學習第二天 1.Android項目結(jié)構(gòu) 2. Activity生命周期 3.Studio使用 4...
    yezi1989閱讀 628評論 0 2
  • ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 6,358評論 0 17
  • 一張普通的近乎不起眼的小桌子徘键,仿實木色的面板,黑色的塑鋼桌腿螟凭,尺寸不大它呀,小小巧巧,罩上一張漂亮的桌布下隧,紅色小碎花襯...
    馨香盈袖閱讀 156評論 0 0
  • 大約9年前汪拥,05年吧篙耗。那時,移動互聯(lián)網(wǎng)還沒出來脯燃,這個世界還很冷清蒙保。 我牙齦紅腫發(fā)炎,不知道是什么毛病邓厕,憂心忡忡。我...
    旅行的旋律閱讀 597評論 0 1
  • 1314本發(fā)售書,每一本書都代表了陳遠坤對許靜的愛意叽掘,最讓人悲哀的是陳遠坤還是沒能寫出他于許靜的結(jié)局。
    陳遠坤閱讀 58評論 0 0