Please Enable JavaScript!
Gon[ Enable JavaScript ]

안드로이드(Android) 스레드를 이용하여 애니메이션 구현하기

안드로이드 개발
반응형

안드로이드(Android) 스레드를 이용하여 애니메이션 구현하기

 

개발환경 : window 7 64bit, Eclipse Mars, Android 4.2.2

 

Runnable 인터페이스로 스레드를 만들어서 사용하는

간단한 방법에 대해서 알아보았는데 이 소스를 이용해

이미지가 돌아가는 애니메이션을 구현해 봅니다.


 

Activity 가 시작되는 함수 onStart() 에서 스레드

객체를 만들어서 run() 함수를 구현합니다.

run 에는 스레드가 돌면서 핸들에 sendMessage()

사용해 이벤트를 발생시킵니다.

 

@Override
protected void onStart() {
	super.onStart();

	Thread myThread = new Thread(new Runnable() {
		public void run() {
			while (true) {
				try {
					handler.sendMessage(handler.obtainMessage());
					Thread.sleep(1000);
				} catch (Throwable t) {
				}
			}
		}
	});

	myThread.start();
}

 

run 함수에서 발생시킨 이벤트를 Handler 객체의

handleMessage 함수에서 메시지를 받아 처리 합니다.

 

Handler handler = new Handler() {

	@Override
	public void handleMessage(Message msg) {
		updateThread();
	}
};

 

매번 발생할 때 마다 updateThread() 함수가

실행되게 되는데 이 함수 안에는 4개의 이미지를

번갈아 가면서 보여줍니다.

이 이미지들은 동그라미들인데 방향이 다 틀려서

4가지 이미지를 차례로 로딩하면 한바뀌 도는 것

같이 보일 겁니다. 이게 중요한 것이 아니라

스레드를 이용해서 이미지들을 바꿔서 애니메이션

효과를 얻었다는 것이죠.

 

private void updateThread() {

	int mod = i % 4;
	
	switch (mod) {
	case 0:
		i++;
		imageView.setImageResource(R.drawable.images01);
		break;
	case 1:
		i++;
		imageView.setImageResource(R.drawable.images02);
		break;
	case 2:
		i++;
		imageView.setImageResource(R.drawable.images03);
		break;
	case 3:
		i = 0;
		imageView.setImageResource(R.drawable.images04);
		break;
	}
	myi.setText(String.valueOf(i));
}

 

전체 activity 소스는 다음과 같습니다.

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.ImageView;
import android.widget.TextView;

public class SampleActivity11 extends Activity {

	private int i = 0;
	private TextView myi;
	private ImageView imageView;
	
	Handler handler = new Handler() {

		@Override
		public void handleMessage(Message msg) {
			updateThread();
		}
	};

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_sample_activity11);

		myi = (TextView) findViewById(R.id.i);
		imageView = (ImageView) findViewById(R.id.myImageView);
	}

	@Override
	protected void onStart() {
		super.onStart();

		Thread myThread = new Thread(new Runnable() {
			public void run() {
				while (true) {
					try {
						handler.sendMessage(handler.obtainMessage());
						Thread.sleep(1000);
					} catch (Throwable t) {
					}
				}
			}
		});

		myThread.start();
	}

	private void updateThread() {

		int mod = i % 4;
		
		switch (mod) {
		case 0:
			i++;
			imageView.setImageResource(R.drawable.images01);
			break;
		case 1:
			i++;
			imageView.setImageResource(R.drawable.images02);
			break;
		case 2:
			i++;
			imageView.setImageResource(R.drawable.images03);
			break;
		case 3:
			i = 0;
			imageView.setImageResource(R.drawable.images04);
			break;
		}
		myi.setText(String.valueOf(i));
	}
}

 

 

반응형
Posted by 녹두장군1
,