본문 바로가기
프로그래밍/Android

Android Splash(Intro) Activity추가하기

by Mr-후 2018. 9. 18.
반응형


Android Splash(Intro) Activity추가하기




이번에 안드로이드 개발을 하게 되면서 다양한 작업들을 해보고 있는 중인데, 기획쪽 요구사항이 앱 구동시에 잠깐 나오는 스플래시(인트로) 화면을 추가하고 싶다고 한다. 


기존 소스를 보니 메뉴가 나타나기전과 나타난 후로 스플래시를 구분 짓도록 애니메이션이 추가되어 있을 뿐 별도의 스플래시 화면이 만들어져 있지는 않았다. 


아이폰이야 능숙하게 처리할 수 있지만 별 것 없는데 괜히 어렵다. 검색을 해보니 역시 별건 없다. 


SplashActivity를 하나 만들었고 res폴더 하위의 layout폴더 안에 activity_splash.xml을 만들었다. 

activity_splash.xml안에는 달랑 회사 로고 이미지 하나가 들어가 있을 뿐이다. 




<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:background="#ffffff"

    android:gravity="center_horizontal|center_vertical">

    <ImageView

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:src="@drawable/logo_intro"

        android:layout_gravity="center_vertical|center_horizontal" />


</LinearLayout>


이미지 로고를 중앙에 위치 시키기 위한 코드만 유심히 볼 필요가 있다. 


그리고 SplashActivity 클래스에서는 스플래시 화면이 보여질 시간을 정하고 onCreate에서 setContentView를 해 주면 된다. 그리고 중요한것은 스플래시 화면이 나타난 후 실제 메인으로 넘어가는 처리를 하는 부분인데 sleep을 사용하라는 사람도 있었지만 그건 안드로이드의 라이프사이클에 어것나는 처리인 듯, 로고가 화면에 나타나지 않았다. 아마도 onCreate가 아닌 다른 부분에서 추가를 해야하는 것일 듯 하다. 


해서 찾은것이 Handler이다. 

역시 인터넷 검색을 통해 찾은 자료인데 딱 원하던 소스라 마음에 든다. 


public class SplashActivity extends AppCompatActivity {


    private final int SPLASH_DISPLAY_TIME = 300;


    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_splash);


        @SuppressLint("HandlerLeak") final Handler handler = new Handler(){

            @Override

            public void handleMessage(Message msg) {

                super.handleMessage(msg);

                Intent intent = new Intent(SplashActivity.this,ActivityIntro.class);

                startActivity(intent);

                //overridePendingTransition(0,0); // > 좌로 이동되는 애니메이션 없음

                finish();

            }

        };


        handler.sendEmptyMessageDelayed(0,SPLASH_DISPLAY_TIME);

    }

}


막상 생각만 가지고 있을때는 막막하다가 실제 코딩을 해서 넣어 보면 별 것 없다는 생각이 들긴 하지만 아직은 초보라 배우고 익혀야할게 많은건 사실이다. 




간단한 코드 같지만 Handler에 대한 사용법과 애니메이션을 제어하기 위한 코드도 함께 있다. 

overridePendingTransition(0,0)은 반드시 startActivity() 와 finish() 사이에 위치 시켜야 애니메이션을 없앨 수 있다. 그러나 나는 우에서 좌로 밀고 들어오는 (push되는) 애니메이션이 좋아 그냥 주석 처리를 해 두었다. 아무도 눈치 채지 못했다. 


다음, AndroidManifest.xml 파일에서 앱 시작시점의 액티비티를 변경해주면 된다. 


<activity android:name=".SplashActivity"

android:screenOrientation="portrait">

<intent-filter>

<action android:name="android.intent.action.VIEW" />

<action android:name="android.intent.action.MAIN"/>


<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

<intent-filter>

<action android:name="android.intent.action.VIEW" />

<category android:name="android.intent.category.DEFAULT" />

<category android:name="android.intent.category.BROWSABLE" />

<data android:scheme="com.xxxx" android:host="service" />

</intent-filter>

</activity>



이렇게 안드로이드 앱의 첫번째 스플래시 인트로를 추가해보았다. ^^ 


반응형