OrientationEventListener implementieren

  • 3 Antworten
  • Letztes Antwortdatum
F

fisherman

Neues Mitglied
0
Hallo,

ich bastle gerade an den ersten Versuchen eines einfach Spiels. Die Steuerung soll dabei über den Lagesensor funktionieren, genauer gesagt indem ich das Handy nach links oder rechts drehe (um die z-Achse). Mit Android 1.5 gibt es hierfür wohl den OrientationEventListener. Über diesen EventListener kann man die Methode onOrientationChanged implementieren, die als Parameter den Winkel (0-360°) mit gibt.

Von meiner View-Klasse aus starte ich einen Thread zur Bearbeitung des Spielgeschehens. Allerdings funktioniert das wohl nicht ganz, da ich seit der Implementierung nur einen schwarzen Bildschirm angezeigt bekomme. Beim Debuggen komme ich leider auch nicht weiter als bis zur ersten Zeile der folgenden Methode:

Code:
private void initSensor(){
        OrientationEventListener orientationListener = new OrientationEventListener(gameView.getContext(), SensorManager.SENSOR_DELAY_NORMAL) {
            
            @Override
            public void onOrientationChanged(int orientation) {
                gameView.rotate((float)orientation);
            }
        };
        orientationListener.enable();
    }
Die Methode initSensor() rufe ich derzeit in meiner Threadklasse in der run() Methode auf, kurz bevor die "Spiel"-Schleife startet. Die Eigenschaft gameView ist eine Referenz auf mein View-Objekt. Könnte mir vorstellen, dass der EventListener sich nicht ganz mit dem Thread verträgt, weiß derzeit aber nicht wie ich die Sache anders angehen kann, da ich was Java betrifft etwas eingerostet bin. :)

EDIT: Ich teste den ganzen Spaß derzeit nur mit dem Emulator, da ich selbst noch kein stolzer Besitzer eines Android-Handys bin.

Vielen Dank im Voraus für jeden Hinweis der mich weiterbringt.
fisherman
 
Zuletzt bearbeitet:
Hat bisher noch niemand diesen EventListener implementiert bzw. Erfahrung damit gesammelt?

Habe es soeben auch mit dem 1.6 SDK probiert, leider ohne Erfolg. Mein Spiel wird zwar geladen, aber der Event wird nie ausgelöst, zumindest komme ich beim Debuggen nie rein. Außerdem wird im Emulator beim Drehen des Displays (Strg+F12) das Spiel jedes mal neu gestartet.

Kann mir bitte jemand weiterhelfen...

Thx und Grüße
fisherman
 
Hi.

bzgl des Neuladens beim Drehen kannste Dir mal folgende Blog-Reihe zu Gemüte führen: AndroidGuys » Rotational Forces, Part Two

Part Two ist Zufall - muss mal alle überfliege welche Dir hilft. Wenn sich die Ausrichtung des Telefons ändert, wird ja automatisch auch die App angepasst- dabei wird die Activity neu geladen! In der Blog-Reihe steht wie man das umgeht, solche Events "händisch" abfängt etc.

Bzgl der Events hab ich leider auch keine Ahnung...

Gruß,
Shini
 
Shinigami, danke für deine Antwort!

Das Problem liegt aber am Emulator der sich einfach anders als in der Doku beschrieben verhält. Habe seit kurzem mein Samsung Galaxy (das ich übrigens Klasse finde :)) und auf dem funktioniert der EventListener wunderbar.
Für diejenigen, denen Code mehr sagt als Worte, hier meine derzeitige Implementierung.

Code:
    private void initSensor(){
        OrientationEventListener orientationListener = new OrientationEventListener(gameView.getContext(), SensorManager.SENSOR_DELAY_NORMAL) {
            
            @Override
            public void onOrientationChanged(int orientation) {
                synchronized (gameView.getHolder()) {
                    if (orientation != -1){
                        gameView.rotation = orientation - gameView.orientation;
                        gameView.orientation = orientation;
                    }
                }
                
            }
        };
        orientationListener.enable();
    }
 

Ähnliche Themen

M
  • maksimilian
Antworten
6
Aufrufe
1.078
jogimuc
J
M
  • maksimilian
Antworten
1
Aufrufe
1.578
jogimuc
J
Tiefkuehlpizza
Antworten
1
Aufrufe
979
Tiefkuehlpizza
Tiefkuehlpizza
Zurück
Oben Unten