안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요 제목 그대로 ..SurfaceView에서 onTouchEvent가 동작하질 않아서 ... 질문합니다-_-;
다른 예제들 보면 잘만 동작하던데.. 전 왜 안될까요?
싸맨지 3일, 그 뒤 검색만 이틀 .. 모르겠어요 살려주세요
focus도 바꿔보고 onClick retrun 값도 true로 해줘보고 해봐도 안되네요 허엉.....ㅠㅠ
package com.SurfaceViewTest;
import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.os.Bundle; import android.util.Log; import android.view.Display; import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.Toast;
public class SurfaceViewTestActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new mSurfaceView(this));
}
public class mSurfaceView extends SurfaceView implements SurfaceHolder.Callback{
mThread thread;
private int width;
private int height;
String TAG = "mSurfaceView";
public mSurfaceView(Context context) {
super(context);
// TODO Auto-generated constructor stub
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
SurfaceHolder holder = getHolder();
holder.addCallback(this);
thread = new mThread(getBaseContext(), holder);
}
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
// TODO Auto-generated method stub
}
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
thread.start();
}
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
boolean done = true;
while(done){
try{
thread.join();
done = false;
}catch(InterruptedException e){
//
}
}
thread.stop();
}
public class mThread extends Thread {
String TAG = "thread";
SurfaceHolder _holder;
Bitmap background;
public mThread(Context context, SurfaceHolder holder){
_holder = holder;
Display display = ((WindowManager)context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
width = display.getWidth();
height = display.getHeight();
background = BitmapFactory.decodeResource(context.getResources(), R.drawable.background);
background = Bitmap.createScaledBitmap(background, width, height/2, true);
//setClickable(true);
}
public void run(){
while(true){
Canvas canvas = null;
canvas = _holder.lockCanvas();
try{
synchronized (_holder){
canvas.drawBitmap(background, 0, 0, null);
}
}finally{
_holder.unlockCanvasAndPost(canvas);
}
} // while end
} // reun end
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), "touch!!!!", Toast.LENGTH_SHORT).show();
Log.i("onTouchEvent", "run() object dododo!!!");
return false;
}
} // thread end
} // mSurface end
} // main class end



publicbooleanonTouchEvent(MotionEvent event) {16.// TODO Auto-generated method stub17.Toast.makeText(getApplicationContext(),"touch!!!!", Toast.LENGTH_SHORT).show();18.Log.i("onTouchEvent","run() object dododo!!!");19.returnfalse;20.}이부분을 액티비티에 붙여 보세요..
스레드 안에서 하시지 마시고..