Runnable 인터페이스로 스레드를 만들어서 사용하는 간단한 방법에 대해서 알아보았는데 이 소스를 이용해 이미지가 돌아가는 애니메이션을 구현해 봅니다. |
Activity 가 시작되는 함수 onStart() 에서 스레드
객체를 만들어서 run() 함수를 구현합니다.
run 에는 스레드가 돌면서 핸들에 sendMessage()
사용해 이벤트를 발생시킵니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | @Overrideprotected 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 함수에서 메시지를 받아 처리 합니다.
1 2 3 4 5 6 7 | Handler handler = new Handler() { @Override public void handleMessage(Message msg) { updateThread(); }}; |
매번 발생할 때 마다 updateThread() 함수가
실행되게 되는데 이 함수 안에는 4개의 이미지를
번갈아 가면서 보여줍니다.
이 이미지들은 동그라미들인데 방향이 다 틀려서
4가지 이미지를 차례로 로딩하면 한바뀌 도는 것
같이 보일 겁니다. 이게 중요한 것이 아니라
스레드를 이용해서 이미지들을 바꿔서 애니메이션
효과를 얻었다는 것이죠.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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 소스는 다음과 같습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | 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)); }} |

SSISO Community