본문 바로가기

Android

Android Studio Splash(Lanunch) image 띄우기

필자는 통짜 웹뷰 앱을 만들고 있으므로 웹뷰 기반의 스플래시 이미지를 설명하도록 하겠다


activity_main.xml

이미지뷰와 웹뷰를 뷰에 설정함

이때 android:visibility="visible" or "gone"이 중요함

앱을 띄우자마자 웹뷰말고 스플래시 이미지뷰를 먼저 보이기 위함

<ImageView android:id="@+id/loading"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:visibility="visible"
android:src="@drawable/wait"
/>

<WebView
android:id="@+id/screen_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone" />


MainActivity.java

onCreate함수에는 기본적인 웹뷰 설정과 함께 원하는 url을 로드해줌

빨간글씨의 setWebViewClient가 중요함

여기서 웹뷰에 대한 구체적인 설정들을 할수가 있음(외부연결링크, 외부앱연결, 마켓연결, 페이지로드상태체크 등등)

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

mWebview = (WebView) findViewById(R.id.screen_main);
WebSettings webSettings = mWebview.getSettings();
webSettings.setJavaScriptEnabled(true);

mWebview.setWebViewClient(new WebClient());
mWebview.setWebChromeClient(new WebChromeClient());
mWebview.loadUrl("[원하는URL]");
}


WebClient라는 클래스를 만들어서 webview에 대한 좀더 자세한 설정들을 이곳에서 오버라이드해서 처리

이 코드의 위치는 MainActivity안에 있으면 됨

onPageFinished라는 함수를 오버라이딩해서 이용하면 웹뷰가 모두 로드되고 난뒤에 실행됨

이곳에서 처음에 activity_main.xml 에서 visibility를 설정한 것을 스위칭 해주면서 스플래시 이미지와 웹뷰를 자연스럽게 뷰전환 해줌

class WebClient extends WebViewClient {


@Override
public void onPageFinished(WebView view, String url) {
findViewById(R.id.loading).setVisibility(View.GONE);
findViewById(R.id.screen_main).setVisibility(View.VISIBLE);
}
}

다만, 이 방식은 문제가 여러개 있는데 그 중 하나가 기존에 안드로이드 스플래시 이미지를 띄울 때 딜레이를 걸어서 띄웠지만 이 방식으로 하게 되면 웹뷰가 로드가 다 되어야 스플래시가 끝나게 된다. 그래서 인터넷 환경에 따라 스플래시 이미지가 떠있는 시간이 다를 수 있다. 

대부분의 웹뷰 앱에서는 이같은 방법을 스플래시 위에 로딩바를 넣어서 로딩이 되는 중으로 사용자들의 심리를 안정 시켜준다. 

그리고 안드로이드는 앱을 첫 실행시와 두번째 실행시 로딩속도가 다르다. 그로 인해 종료가 되어있는 폰에서 실행할 때와 한번 실행시키고 종료시켰던 폰에서 실행시키는 속도가 미묘하게 차이가 있다는 단점이 있다.