사용자가 화면에 닿는 곳에 그림을 그려야하는 예를 만들고 싶습니다."onTouch"방법으로 이미지가 표시되지 않습니다.
캔버스를 사용했지만 화면이 항상 공백으로 표시됩니다. 아래는 내 코드입니다 :
public class MainActivity extends Activity implements OnTouchListener {
MySurfaceView mySurfaceView;
float x, y;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mySurfaceView = new MySurfaceView(MainActivity.this);
mySurfaceView.setOnTouchListener(this);
x = 0;
y = 0;
setContentView(mySurfaceView);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
x = event.getX();
y = event.getY();
return false;
}
@Override
protected void onResume() {
mySurfaceView.resume();
super.onResume();
}
@Override
protected void onPause() {
mySurfaceView.pause();
super.onPause();
}
class MySurfaceView extends SurfaceView implements Runnable {
SurfaceHolder mSurfaceHolder;
Thread mThread;
boolean isRunning = true;
public MySurfaceView(Context context) {
super(context);
mSurfaceHolder = getHolder();
}
@Override
public void run() {
while (isRunning) {
if (!mSurfaceHolder.getSurface().isValid()) {
continue;
}
Canvas canvas = mSurfaceHolder.lockCanvas();
canvas.drawRGB(02, 02, 150);
if (x != 0 || y != 0) {
Bitmap test = BitmapFactory.decodeResource(getResources(),
R.drawable.ic_launcher);
canvas.drawBitmap(test, x, y, null);
}
mSurfaceHolder.unlockCanvasAndPost(canvas);
}
}
public void pause() {
isRunning = false;
while (true) {
try {
mThread.join();
} catch (Exception e) {
e.printStackTrace();
}
break;
}
mThread = null;
}
public void resume() {
isRunning = true;
mThread = new Thread();
mThread.start();
}
}
}
은 내가 스레드 –