ui_3k1
Gesperrt
- 197
Hallo,
wer schon mal etwas mit dem Beschleunigungssensor gemacht hat, wird vielleicht die Erfahrung gemacht haben, dass bei einem Tablet, oder einem anderen Gerät im "Standard-Querformat, die Achsen (X,Y,Z) getauscht sind.
Hier schnell eine Funktion, die für dieses Problem Abhilfe schafft:
Das Beispiel ist darauf ausgelegt, dass ein Smartphone im Landscape-Modus seitlich gekippt wird (also das Kippen so abläuft, als ob das Handy mittig an einem Lenkrad (BMW-Emblem / Mercedes Stern) festklebt wäre und das Lenkrad dreht wird = Y-Achse).
Der Sensor kann dann als solcher in dieser Form angesprochen werden:
Natürlich benötigen wir eine Variable, die den zurückgelieferten Wahrheitswert aus der ersten Funktion speichert. Dieser lässt sich zB in der onCreate-Methode setzen.
wer schon mal etwas mit dem Beschleunigungssensor gemacht hat, wird vielleicht die Erfahrung gemacht haben, dass bei einem Tablet, oder einem anderen Gerät im "Standard-Querformat, die Achsen (X,Y,Z) getauscht sind.
Hier schnell eine Funktion, die für dieses Problem Abhilfe schafft:
Das Beispiel ist darauf ausgelegt, dass ein Smartphone im Landscape-Modus seitlich gekippt wird (also das Kippen so abläuft, als ob das Handy mittig an einem Lenkrad (BMW-Emblem / Mercedes Stern) festklebt wäre und das Lenkrad dreht wird = Y-Achse).
Code:
[COLOR=DarkOrange]/**Gibt, sofern es sich bei dem Geraet um ein Tablet handelt, die Z-Achse als Fixpunkt zurueck*/[/COLOR]
public boolean getDeviceDefaultOrientation() {
WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);[COLOR=SeaGreen] [COLOR=YellowGreen]// je nach dem wo die Implementierung erfolgt: [/COLOR][/COLOR][COLOR=YellowGreen]"Context.WINDOW_SERVICE);"[/COLOR]
Configuration config = getResources().getConfiguration();
int rotation = windowManager.getDefaultDisplay().getRotation();
if (((rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180) &&
config.orientation == Configuration.ORIENTATION_LANDSCAPE)
|| ((rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270) &&
config.orientation == Configuration.ORIENTATION_PORTRAIT)) {
return true;
} else {
return false;
}
}
Code:
[COLOR=DarkOrange]/**Aktualisiert den Neigungswert, den das Geraet erfaehrt.*/[/COLOR]
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
synchronized (this) {
if (sensorEvent.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
if (tabletMode)
[COLOR=YellowGreen] // fuer Tablets sprechen wir die X-Achse an[/COLOR]
sensor_axisVar = -(int) (sensorEvent.values[0] );
else
[COLOR=YellowGreen] // fuer Smartphones die Y-Achse[/COLOR]
sensor_axisVar = (int) (sensorEvent.values[1] );
}
}
}
Code:
tabletMode = getDeviceDefaultOrientation();
Zuletzt bearbeitet: