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>
이렇게 안드로이드 앱의 첫번째 스플래시 인트로를 추가해보았다. ^^
'프로그래밍 > Android' 카테고리의 다른 글
FrameLayout & <merge />태그 (0) | 2018.10.05 |
---|---|
Android WebView Session 제거 (0) | 2018.09.18 |
RelativeLayout 상대위치 속성 4가지 (0) | 2018.09.06 |
안드로이드 폰 개발자 옵션 및 USB 디버깅 설정(갤럭시 노트2) (0) | 2018.09.06 |
Android 배포를 위한 APK 생성 절차 (0) | 2018.09.05 |