Hallo,
ich habe ein Problem mit dem SurfaceView und dem Back Button (Hardware) meines Handys
und zwar reagiert der leider nicht. Es scheint wohl generell ein Problem mit dem SurfaceView und den Hardware Buttons (und auch dem Drehen) zu geben, aber eine Lösung hab ich leider nicht gefunden.
Gibt es denn eine Lösung, wie ich es schaffe einen Thread zu beenden, wenn ich den Back Button drücke?
Gibt es da eine Methode, die dann aufgerufen wird?
Es funktioniert leider nicht, wenn ich die onBackPressed() Methode überschreibe
Kann mir da jemand helfen?
Vielen Dank,
Chris
Java Code:
[ol]
[li]package de.fuckthesystem.thenewboston;[/li]
[li] [/li]
[li]import …[/li]
[li] [/li]
[li]public class MainGamePanel extends SurfaceView implements SurfaceHolder.Callback {[/li]
[li] [/li]
[li] private static final String TAG = MainGamePanel.class.getSimpleName();[/li]
[li] public MainThread thread;[/li]
[li] private GreenBall greenBall;[/li]
[li] private SpaceBackground spaceBackground; [/li]
[li] [/li]
[li] private int counter;[/li]
[li] [/li]
[li] [/li]
[li] public MainGamePanel(Context context) {[/li]
[li] super(context);[/li]
[li] [/li]
[li] //Loging Stuff[/li]
[li] Log.d(TAG, “MainGamePanel Construkter”);[/li]
[li] [/li]
[li] [/li]
[li] getHolder().addCallback(this);[/li]
[li] [/li]
[li] //create greenBall and Load[/li]
[li] greenBall = new GreenBall(BitmapFactory.decodeResource(getResources(), R.drawable.greenball), 50, 50);[/li]
[li] //create BG and Load[/li]
[li] spaceBackground = new SpaceBackground(BitmapFactory.decodeResource(getResources(), R.drawable.verticalspace), 50);[/li]
[li] [/li]
[li] [/li]
[li] thread = new MainThread(getHolder(), this);[/li]
[li] [/li]
[li] setFocusable(true);[/li]
[li] }[/li]
[li] [/li]
[li] @Override[/li]
[li] public void surfaceChanged(SurfaceHolder holder, int format, int width,[/li]
[li] int height) {[/li]
[li] // TODO Auto-generated method stub[/li]
[li] [/li]
[li] //Loging Stuff[/li]
[li] Log.d(TAG, “MainGamePanel Surface Changed”);[/li]
[li] [/li]
[li] }[/li]
[li] [/li]
[li] @Override[/li]
[li] public void surfaceCreated(SurfaceHolder holder) {[/li]
[li] [/li]
[li] //Loging Stuff[/li]
[li] Log.d(TAG, “MainGamePanel surfaceCreated”);[/li]
[li] [/li]
[li] [/li]
[li] thread.setRunning(true);[/li]
[li] thread.start();[/li]
[li] [/li]
[li] }[/li]
[li] [/li]
[li] @Override[/li]
[li] public void surfaceDestroyed(SurfaceHolder holder) {[/li]
[li] [/li]
[li] //Loging Stuff[/li]
[li] Log.d(TAG, “MainGamePanel surfaceDestroyed”);[/li]
[li] [/li]
[li] [/li]
[li] boolean retry = true;[/li]
[li] while(retry) {[/li]
[li] try {[/li]
[li] Log.d(TAG, “trying to destroy thread”);[/li]
[li] thread.join();[/li]
[li] retry = false;[/li]
[li] } catch (InterruptedException e) {[/li]
[li] // try again shutting down the thread[/li]
[li] }[/li]
[li] }[/li]
[li] Log.d(TAG, “did destroy thread”);[/li]
[li] [/li]
[li] [/li]
[li] }[/li]
[li] [/li]
[li] @Override[/li]
[li] public boolean onTouchEvent(MotionEvent event) {[/li]
[li] [/li]
[li] //Loging Stuff[/li]
[li] Log.d(TAG, “MainGamePanel onTouchEvent”);[/li]
[li] [/li]
[li] if (event.getAction() == MotionEvent.ACTION_DOWN) {[/li]
[li] // delegating event handling to the droid[/li]
[li] greenBall.handleActionDown((int)event.getX(), (int)event.getY());[/li]
[li] [/li]
[li] // check if in the lower part of the screen we exit[/li]
[li] if (event.getY() > getHeight() - 50) {[/li]
[li] thread.setRunning(false);[/li]
[li] ((Activity)getContext()).finish();[/li]
[li] } else {[/li]
[li] Log.d(TAG, “Coords: x=” + event.getX() + “,y=” + event.getY());[/li]
[li] }[/li]
[li] } if (event.getAction() == MotionEvent.ACTION_MOVE) {[/li]
[li] // the gestures[/li]
[li] if (greenBall.isTouched()) {[/li]
[li] // the droid was picked up and is being dragged[/li]
[li] greenBall.setX((int)event.getX());[/li]
[li] greenBall.setY((int)event.getY());[/li]
[li] }[/li]
[li] } if (event.getAction() == MotionEvent.ACTION_UP) {[/li]
[li] // touch was released[/li]
[li] if (greenBall.isTouched()) {[/li]
[li] greenBall.setTouched(false);[/li]
[li] }[/li]
[li] }[/li]
[li] return true;[/li]
[li] }[/li]
[li] [/li]
[li] @Override[/li]
[li] public void draw(Canvas canvas) {[/li]
[li] [/li]
[li] //Loging Stuff[/li]
[li] //Log.d(TAG, “MainGamePanel draw”);[/li]
[li] [/li]
[li] [/li]
[li] // TODO Auto-generated method stub[/li]
[li] //super.draw(canvas);[/li]
[li] //canvas.drawColor(Color.RED);[/li]
[li] canvas.drawBitmap(spaceBackground.getLook(), 0, (spaceBackground.getY()-spaceBackground.getLook().getHeight())+canvas.getHeight(), null);[/li]
[li] [/li]
[li] Paint textPaint = new Paint();[/li]
[li] textPaint.setARGB(50, 254, 10, 50);[/li]
[li] textPaint.setTextAlign(Align.CENTER);[/li]
[li] textPaint.setTextSize(50);[/li]
[li] canvas.drawText(“counter :”+ counter, canvas.getWidth()/2, 200, textPaint);[/li]
[li] counter++;[/li]
[li] [/li]
[li] greenBall.draw(canvas);[/li]
[li] [/li]
[li] }[/li]
[li] [/li]
[li] [/li]
[li] [/li]
[li] [/li]
[li] public void destroyThread() {[/li]
[li] [/li]
[li] //Loging Stuff[/li]
[li] Log.d(TAG, “MainGamePanel destroyThread”);[/li]
[li] [/li]
[li] [/li]
[li] // TODO Auto-generated method stub[/li]
[li] /*boolean retry = true;[/li]
[li]** while(retry) {[/li]
[li] try {[/li]
[li] thread.join();[/li]
[li] retry = false;[/li]
[li] } catch (InterruptedException e) {[/li]
[li] // try again shutting down the thread**[/li]
[li]** }[/li]
[li] }*/**[/li]
[li] }[/li]
[li]}[/li]
[/ol]