SensorEventListener - Rotieren

  • Hallo,
    ich schreibe gerade ein kleines Spiel, und ich benutze einen SensorEventListener und berechne dort mithilfe des Accelrometer einen Winkel . Das funktioniert auch alles, jedoch habe ich das Problem, dass er bei meinem Tablet x und y also value[0] und value[1] miteinander vertauscht, da wohl die Standardausrüstung des Accelrometer anders ist. Ich habe das Spiel auf Portrait, gibt es eine Möglichkeit den Sensor auf z. B. Portrait umzustellen oder irgendeine Andere Möglichkeit, das kompatibel zu machen ?


    Schon mal vielen Dank für die Hilfe,
    Kevin

  • Das Thema hat sich schon erledigt.


    Falls es jemanden Interessiert:
    In onCreate():

    Code
    WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);	
    Display display = windowManager.getDefaultDisplay();	
    displayMode = display.getOrientation();


    und dann einfach in onSensorChanged(SensorEvent event) :

    Code
    switch (displayMode) {
    	case 3:
    		aX = event.values[1];
    		aY = event.values[0];
    		break;
    	case 1:
    	default:
    		aX = event.values[0];
    		aY = event.values[1];
    }
  • Hallo,


    ein kleiner Tipp noch zu deinem Codeschnipsel.


    Display.getOrientation() solltest du nicht mehr verwenden, da es seit API-Level 8 als deprecated gekennzeichnet ist. Stattdessen kann du Display.getRotation() verwenden. Tatsächlich ist es auch so das Display.getOrientation() an Display.getRotation() delegiert. Auch solltest du in den case-Marken deines switch-Block nicht die numerischen Werte nutzen (magic numbers sind immer ungern gesehen) und stattdessen die Konstanten nutzen bspw. Surface.ROTATION_90 usw.. Das sind zwar nur kosmetische Änderungen aber die Lesbarkeit deines Codes verbessert sich.


    MfG
    Jirka

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!