반응형
1. View
View는 onDraw를 통해 그림을 그려주고 invalidate를 호출하면 다시 onDraw()가 호출된다.
하지만, 안드로이드에서는 invalidate()를 호출하면 에러가 난다. Handler를 사용하거나 postInvalidate()를 호출해야 한다.
2. SurfaceView
SurfaceView는 기본적으로 더블버퍼링을 사용하며, 3D도 지원되기 때문에 게임에서 주로 사용된다.
View는 onDraw를 통해 그림을 그려주고 invalidate를 호출하면 다시 onDraw()가 호출된다.
하지만, 안드로이드에서는 invalidate()를 호출하면 에러가 난다. Handler를 사용하거나 postInvalidate()를 호출해야 한다.
import android.content.Context;
import android.graphics.Canvas;
import android.view.View;
public class MyView extends View{
public MyView(Context context) {
super(context);
// invalidate
postInvalidate();
}
@Override
protected void onDraw(Canvas canvas) {
// draw
}
}
2. SurfaceView
SurfaceView는 기본적으로 더블버퍼링을 사용하며, 3D도 지원되기 때문에 게임에서 주로 사용된다.
import android.content.Context;
import android.graphics.Canvas;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
public class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback{
private SurfaceHolder mHolder;
private DrawThread mThread;
public MySurfaceView(Context context) {
super(context);
mHolder = getHolder();
mHolder.addCallback(this);
mThread = new DrawThread(mHolder);
}
@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
mThread.start();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
boolean retry = true;
while(retry){
mThread.interrupt();
retry = false;
}
}
// call surfaceDestroyed
public void close() {
setVisibility(View.GONE);
}
class DrawThread extends Thread{
public DrawThread(SurfaceHolder holder) {
mHolder = holder;
}
public void run(){
Canvas canvas = null;
while(!isInterrupted()) {
try{
canvas = mHolder.lockCanvas();
synchronized(mHolder){
// draw
}
}finally{
if(canvas != null) mHolder.unlockCanvasAndPost(canvas);
}
}
}
}
}
반응형
'Devlopment > Mobile' 카테고리의 다른 글
COCOS2D Android에서 드래그 앤 드랍(Drag & Drop) (2) | 2012.01.31 |
---|---|
[안드로이드 게임 개발] 1. 시작과 시행착오 (6) | 2012.01.27 |
Cocos2d를 이용하영 FPS 출력하는 기본 소스 (0) | 2012.01.25 |
안드로이드(Android) OnGestureListener 사용법 (0) | 2011.12.27 |
안드로이드에서 OpenGL ES를 사용하는 GLSurfaceView의 기본 골격 (0) | 2011.12.27 |
안드로이드 게임 엔진 (1) | 2011.12.01 |
안드로이드 앱 'SD 카드로 이동', '디바이스로 이동' 기능 (0) | 2011.10.14 |
안드로이드 여러 버전의 APK 배포 (0) | 2011.10.14 |
Windows Phone7 개발 관련 사이트 (0) | 2011.08.08 |
[WIndow Phone7] The type 'System.IObservable`1<T0>' is defined in an assembly that is not referenced. (0) | 2011.08.08 |