●예제
- 쓰레드를 이용하여 사용자가 직접 애니매이션 효과를 만들어 본다. 아래 예제는 화면을 터치하면 이미지가 움직이는 예제이다.
- AniActivity.java
package study.thread; import com.example.day0328.R; import android.app.Activity; import android.os.Bundle; public class AniActivity extends Activity{
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.ani_layout);
}
} |
- MyView.java
package study.thread; import com.example.day0328.R; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.os.Handler; import android.os.Message; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; public class MyView extends View{ Bitmap bitmap; int x, y; Thread thread; Handler handler;
public MyView(Context context, AttributeSet attrs) { super(context, attrs); bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
handler = new Handler(){ //자식쓰레드가 요청한 업무를 수행하는 메서드 재정의 public void handleMessage(Message msg) {
move();
}
};
thread = new Thread(){ public void run() { super.run();
//쓰레드가 죽지않고 계속 진행되려면 run()의 받는 괄호를 만나게 해서는 안된다. while(true){ //move(); //메인쓰레드에게 move호출을 부탁 //핸들러에게 handleMessage()를 수행하게 한다. try { Thread.sleep(500); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } handler.sendEmptyMessage(0); } } };
}
//모든 위젯은 스스로를 그릴때, onDraw메서드를 호출하게 돼있다. //따라서 개발자가 이 시점에 원하는 그래픽 처리를 할 수 있다. protected void onDraw(Canvas canvas) { super.onDraw(canvas); //비트맵 이미지를 올려놓고 자동으로 이동하는 효과 canvas.drawBitmap(bitmap, x, y, null);
}
//그림을 이동시키는 메서드 public void move(){ x+=5; y+=5; //현재 화면의 뷰에 그려진 그림을 지우고 다시 갱신 //자바표준에서는 repaint()라는 것이 있다. invalidate(); }
public boolean onTouchEvent(MotionEvent event) {
thread.start();
return super.onTouchEvent(event); }
}
|
- ani_layout.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" >
<study.thread.MyView android:id="@+id/myView" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ffdd00"/>
</LinearLayout> |
'프로그래밍 > 안드로이드' 카테고리의 다른 글
안드로이드 액션바 (ActionBar) (0) | 2015.04.01 |
---|---|
안드로이드 프래그먼트(Fragment) (0) | 2015.04.01 |
안드로이드 핸들러(Handler) (0) | 2015.03.30 |
안드로이드 쓰레드 (Thread) (0) | 2015.03.26 |
안드로이드 애니매이션1 (Animation) (0) | 2015.03.25 |
댓글