처음 글 올려보네요.
package com.example.test;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
public class GameMain extends SurfaceView implements Callback {
public Context _context;
public GameMain(Context context) {
super(context);
_context = context;
mSurfaceHolder = getHolder();
mSurfaceHolder.addCallback(this);
thread = new GameThread(mSurfaceHolder);
}
@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
Log.i("[뷰]", "BarkusBill - 2.서페이스 교체");
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
Log.i("[뷰]", "BarkusBill - 1.서페이스 구성");
if(thread.getState()==Thread.State.TERMINATED) {
thread = new GameThread(holder);
thread.start();
} else {
thread.start();
}
mRun = true;
}
@Override
public void surfaceDestroyed(SurfaceHolder arg0) {
// TODO Auto-generated method stub
Log.i("[뷰]", "BarkusBill - 3.서페이스 파괴");
try {
thread.join();
} catch(Exception ex) {
ex.printStackTrace();
}
mRun = false;
}
//-------------------------------------------------------------
private GameThread thread;
private boolean mRun = false;
private SurfaceHolder mSurfaceHolder;
class GameThread extends Thread {
public GameThread(SurfaceHolder surfaceHolder) {
}
private void doDraw(Canvas canvas) {
Log.i("", "BarkusBill - 1초에 한번씩 갱신 중." + mRun + " , " + (ii++));
String String_text = "BarkusBill - 1초에 한번씩 갱신 중." + mRun + " , " + (ii++);
float float_x = 10;
float float_y = 20;
Paint Paint_paint = new Paint();
Paint_paint.setColor(Color.WHITE);
Paint_paint.setTextAlign(Paint.Align.LEFT);
Paint_paint.setTextSize(30);
canvas.drawText(String_text
, float_x
, float_y
, Paint_paint);
}
int ii=0;
public void run() {
Log.i("", "Barkusbill mRun - " + mRun);
while(mRun) {
Canvas canvas = null;
try {
canvas = mSurfaceHolder.lockCanvas(null);
synchronized(mSurfaceHolder) {
sleep(100);
doDraw(canvas);
}
} catch(Exception ex) {
ex.printStackTrace();
}
finally {
if(canvas!=null) {
mSurfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
}
}
}
빨간색.굵은 글씨 로 표시하였습니다.
setText 를 canvas 에 쓰레드로 돌리고 있는데
lockCanvas 를 사용하면 invalidate() 효과를 줄 수 있다고 하는데
setText 로 글자표시하려고 했더니 글씨가 계속 겹칩니다.
동작을 안하는 건지? 소스상의 문제인지 알고 싶습니다.