SurfaceView에서 Thread 가 계속 도는 상황에서 어떤 이벤트가 있을 때 다른 Activity로 가려고 아래처럼 했어요.
그런데 안되네요.
소스 많이 보실 필요는 없고 아래 빨갛게 색칠 한 곳만 보시면 되요.
Thread 내에서 Intent 사용하려면 다른 방법으로 사용해야 하나요?
public class MyGameView extends SurfaceView implements Callback {
Activity a = new Activity();
GameThread mThread;
SurfaceHolder mHolder;
private boolean running = false; // to stop Thread
private GestureDetector gestureDetector; // Double Tab 관련 메소드
public MyGameView(Context context, AttributeSet attrs) {
super(context, attrs);
SurfaceHolder holder = getHolder();
holder.addCallback(this);
mHolder = holder;
mThread = new GameThread(holder, context);
gestureDetector = new GestureDetector(new EventCatch()); // Double Tab 등 다양한 이벤트 사용하기 위해 선언
setFocusable(true); // View가 포커스를 받을 수 있도록 설정
}
class GameThread extends Thread {
SurfaceHolder mHolder; // SurfaceHolder를 저장할 변수
Context mContext;
public GameThread(SurfaceHolder holder, Context context) {
mHolder = holder; // SurfaceHolder 보존
mContext = context;
}
//--> onSingleTapConfirmed() 에서 Call 당하면 아래에서 다른 Activity 로 감
// --> 이 부분에서 에러가 남
public void NextFile() {
Intent intent = new Intent(mContext, my.bubblenew.getImage.Start.class);
a.startActivity(intent);
}
public void run() {
Canvas canvas = null; // canvas를 만든다
while (running) {
canvas = mHolder.lockCanvas(); // canvas를 잠그고 버퍼 할당
////// 그림 그려서 움직임 나타냄
} // while
} // run
} // GameThread 끝
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
return gestureDetector.onTouchEvent(event);
}
private class EventCatch extends SimpleOnGestureListener {
@Override
public boolean onDown(MotionEvent e) {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
// TODO Auto-generated method stub
synchronized (mHolder) {
//// -> 여기서 Intent 사용할 Thread 내의 함수를 부름
mThread.NextFile();
}
return true;
}
}
} // SurfaceView



