Please Enable JavaScript!
Gon[ Enable JavaScript ]

안드로이드(Android) Thread 를 이용해 로딩페이지 만들기

안드로이드 개발
반응형

안드로이드(Android) Thread 를 이용해 로딩페이지 만들기

 

환경 : Eclipse Mars, Android 4.2.2

 

이번예제는 로딩페이지를 만드는 것인데 메인페이지에서 정해진 시간동안 머물러 있다가 다음페이지로 넘어갈수 있도록 Thread 이용해 만든 샘플입니다. 프로그램을 만들게 되면 로고라든지 로딩페이지 등을 일정시간 머무르게 한뒤 프로그램 메인 페이지로 이동하게 합니다. 그럴때 이용하는 샘플입니다.

 

안드로이드(Android) Thread 를 이용해 로딩페이지 만들기

 

첫번재 페이지에서 일정시간을 중지한후에 다음페이지로 이동합니다. 메인페이지에서 Thread 를 이용해서 객체를 하나 만든후 Wait() 정한 시간만큼 멈춥니다. 그런후 시간이 지나면 Intent 를 사용해서 다음페이지로 이동합니다.

 

// The thread to wait for splash screen events
splashThread = new Thread() {
	@Override
	public void run() {
		try {
			synchronized (this) {
				// Wait given period of time or exit on touch
				wait(10000);
			}
		} catch (InterruptedException ex) {
		}
		finish();
		// Run next activity
		Intent intent = new Intent();
		intent.setClass(SplashScreenActivity.this, NextActivity.class);
		startActivity(intent);
	}
};
splashThread.start();

 

그리고 시간을 기다리지 않고 클릭하게 되면 바로 넘어가게 되는데 notifiyAll() 이용해 바로 종료하는 것입니다.

 

@Override
public boolean onTouchEvent(MotionEvent evt) {
	if (evt.getAction() == MotionEvent.ACTION_DOWN) {
		synchronized (splashThread) {
			splashThread.notifyAll();
		}
	}
	return true;
}

 

첫번째 로딩페이지 메인 activity 전체 소스 입니다.


import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.MotionEvent;

public class SplashScreenActivity extends Activity {

	private Thread splashThread;

	/** Called when the activity is first created. */

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_splash_screen);
		// The thread to wait for splash screen events
		splashThread = new Thread() {
			@Override
			public void run() {
				try {
					synchronized (this) {
						// Wait given period of time or exit on touch
						wait(10000);
					}
				} catch (InterruptedException ex) {
				}
				finish();
				// Run next activity
				Intent intent = new Intent();
				intent.setClass(SplashScreenActivity.this,
						NextActivity.class);
				startActivity(intent);
			}
		};
		splashThread.start();
	}

	/**
	 * 
	 * Processes splash screen touch events
	 */

	@Override
	public boolean onTouchEvent(MotionEvent evt) {
		if (evt.getAction() == MotionEvent.ACTION_DOWN) {
			synchronized (splashThread) {
				splashThread.notifyAll();
			}
		}
		return true;
	}
}

 

첫번째 메인 activity 의 레이아웃 xml 입니다.


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="50sp"
        android:src="@drawable/ic_launcher" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="Loading..." />

</LinearLayout>

 

두번째 이동페이지의 activity 소스입니다.


import android.app.Activity;
import android.os.Bundle;

public class NextActivity extends Activity {

	/** Called when the activity is first created. */

	@Override
	public void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_next);
	}
}

 

두번째 페이지의 레이아웃 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:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="다음페이지 이동"
        android:textAppearance="?android:attr/textAppearanceLarge" />

</LinearLayout>
반응형
Posted by 녹두장군1
,