Notice
Recent Posts
Recent Comments
Link
«   2025/12   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

Milan Dev

kotlin: 생명주기, 그라데이션 뷰 etc 본문

Android

kotlin: 생명주기, 그라데이션 뷰 etc

jjjuyoa 2022. 8. 20. 16:31

시작부터 머리아픈 그림이다.. 라이프사이클이다.

 

라이프사이클 즉 생명주기란 유한한 메모리를 효과적으로 관리하기 위해 사용하는 것이다.

차례로 확인해보자.

 

onCreate() : 엑티비티가 생설될때 호출되면서 사용자 인터페이스 초기화에 사용된다.

onRestart() : 엑티비티가 멈췄다가 다시 시작되기 바로 전에 호출된다.

onStart() : 엑티비티가 사용자에게 보여지기 바로 직전에 호출된다.

onResume() : 엑티비티가 사용자와 상호작용하기 바로 전에 호출된다.

onPause() : 다른 엑티비티가 보여질 때 호출되고, 데이터 저장, 스레드 중지 등의 처리를 하기에 적당한 메소드이다.

onStop() : 엑티비티가 더이상 사용자에게 보여주지 않을 때 호출된다. 메모리가 부족할 경우에는 onStop() 메소드가 호출되지 않을 수도 있다.

onDestory() : 엑티비티가 소멸될 때 호출되고, finish() 메소드가 호출되거나 시스템이 메모리 확보를 위해 엑티비티를 제거할 때 호출된다. 

 

이제 그라이데이션 뷰를 넣은 간단한 화면을 한번 만들어 보고 라이프사이클이 잘 이루어 지는지 확인해보자.

 

카피디자인할 사이트: justinmind

https://www.justinmind.com/blog/splash-screen-designs/

 

30 inspiring splash screen designs

Splash screens give UI designers the chance to make a bold first impression and reinforce brand identity

www.justinmind.com

 

아이콘 이미지 다운로드 사이트: Flaticon

https://www.flaticon.com/

 

Free Icons and Stickers - Millions of resources to download

Download Free Icons and Stickers for your projects. Resources made by and for designers. PNG, SVG, EPS, PSD and CSS formats

www.flaticon.com

 

아까 만들어 놓은 androidLifecycle 프로젝트에 만들건데 위에 Flaticon(굳이 여기 아니여도 구글링해서 원하는 icon을 xml로 다운받으면됨) 에서 받은 아이콘을 적용할 것이다. res -> drawable 우클릭 -> new -> vector asset -> icon 적용을 하면 된다. 나는 번개모양 아이콘을 적용했다.

 

색상은 자유롭게 변경가능

이제 배경화면을 설정할건데 오늘은 그라데이션 뷰를 적용할 것이다.  근데 어떻게 하지? 

바로 구글링!!

 

구글에 android xml gradient를 검색하고...

음... 이렇게 적용을 하라네요 고맙다 스택오버플로우야...

 

일단 먼저 하고 찍었는데 음 설명하자면

위에 스택오버플로우에서 가져온 것은 배경화면을 설정하는 xml 파일의 내용이고 <gradient/>의 내부에서 배경화면의 

상세내용을 설정 할 수 있다. 그라데이션이 어느 방향에서 시작할지 각도를 정하고 무슨색에서 무슨색으로 끝낼지도

정할 수 있다. 나는 

아까 저스틴마인드에서 찾은 디지니 화면의 배경이 맘에 들었다. 근데 저게 무슨색인지 어떻게 아냐고??

방법이 있지..

홈페이지 우클릭 -> 검사 -> 우측에 style을 내리다 보면 color 누르기 이러면 내가 누른색의 rgb값을 보여줌

어떻게?

이렇게...

저 디지니 배경은 그라데이션이 수직으로 이루어 졌으니 angle은 90으로 하고... 시작 색과 끝 색을 아까 가져온 xml에

적용하자(더 복잡한 그라데이션은 start, end 에 center컬러를 추가할 수 있음) 이렇게 하면 아까 위에서 보여준 것 처럼

배경을 그라데이션 배경을 만들 수 있다. 

자 이제 아이콘이랑 배경을 합쳐서 화면을 만들 코드를 만들어보면?

<?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:background="@drawable/splash_bg_gradient"
    android:id="@+id/relative_layout"
    >

    <ImageView
        android:id="@+id/image_view"
        android:layout_width="120dp"
        android:layout_height="120dp"
        android:src="@drawable/ic_flash"
        android:layout_centerInParent="true"
        />

    <TextView
        android:visibility="invisible"
        android:id="@+id/text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/image_view"
        android:layout_centerHorizontal="true"
        android:text="라이프사이클 메소드"
        android:textColor="#fff"
        android:textSize="30dp"
        android:textStyle="bold"

        />

</RelativeLayout>

화면은 RelativeLayout으로 만들어 주었다.(Layout들의 차이점은 다음시간에 알아보자)

 

android:background="@drawable/아까넣은 배경화면xml파일이름"

으로 배경화면을 설정해주고

 

<ImageView/>태그로 이미지를 적용할 틀을 만들어 주고 소스 파일은 아까 아이콘 파일의 이름으로..

android:src="drawable/아까 다운받은 아이콘 이름" 이렇게 적용하자 

대충 크기랑 위치를 설정해주고 아이콘 밑에 "라이프사이클 메소드"라는 텍스트를 붙일건데 이 텍스트는 라이프사이클이 정상적으로 작동을 확인 하기 위해 android:visibility="invisible"로 투명화 처리 한다. 

 

그리고 각 라이프 사이클이 실행될때마다 로그태그를 볼 수 있게 설정을하자

직접 동작을 지시하는 MainActivity.kt에 라이프 사이클의 과정을 입력하자(보통 처음 생성하면 onCreate만 써있음)

로그태그를 상수로 두고 사이클 과정에서 로그태그가 나오도록 설정! 그리고 onPause()에는 투명화 처리했던 

"라이프사이클 메소드"가 onPause()시 "onPause()실행!"이 나오도록 설정

package com.example.androidlifecycle

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.TextView
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {
    val TAG: String = "로그"

    //엑티비티가 생성되었을때
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        //레이아웃 설정
        setContentView(R.layout.activity_main)

        Log.d(TAG, "MainActivity - onCreate() called")
    }

    override fun onStart() {
        super.onStart()
        Log.d(TAG, "MainActivity - onStart() called")
    }

    override fun onResume() {
        super.onResume()
        Log.d(TAG, "MainActivity - onResume() called")
    }

    override fun onPause() {
        super.onPause()
        text_view.visibility = View.VISIBLE
        text_view.setText("onPause()실행! ")

        Log.d(TAG, "MainActivity - onPause() called")
    }

    override fun onStop() {
        super.onStop()
        Log.d(TAG, "MainActivity - onStop() called")
    }

    override fun onDestroy() {
        super.onDestroy()
        Log.d(TAG, "MainActivity - onDestroy() called")
    }
}

 

 

자 이제 어플을 실행해보자!

음 일단 작동은 잘 하는데.. 

로그태그도 잘 나온다.

 

오케이 onPause도 잘 작동하는것 확인!

 

이상으로 라이프사이클(생명주기)와 그라데이션 뷰에 대해 알아보았습니다~!

다음은 레이아웃의 종류와 사용용도에 대해 알아봅시다

'Android' 카테고리의 다른 글

kotlin: 레이아웃 실전  (0) 2022.08.23
kotlin: 레이아웃(layout)  (0) 2022.08.21
kotlin: 기본 튜토리얼  (0) 2022.08.19
kotlin import 안될 때  (0) 2022.08.14
kotlin 시작전...(Android Studio)  (0) 2022.07.30