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:
), dass dies ja praktisch schon den Beweis liefert, dass besagte Kommentierung sowieso eher untergewichtet werden kann. Natuerlich seid ihr wahrscheinlich auch deutlich professioneller unterwegs als der Durchschnitt hier im Forum (ernst gemeint) und ich kann nicht davon ausgehen, dass Hanni und Nanni es ebenfalls verstehen.
Aber nur dadurch kommt man selbst darauf: "Oh, stimmt ... so ganz verständlich ist das nicht was ich da mache. Nenne ich die Methode so, die Variablen vll. so, dann ist das für den nächsten auch klar was ich da mache" oder "Okay, mehrere Kommentare könnten den Hack den ich da grade zusammenschuster leserlicher machen" ...
Es ist auch eines der Bücher, das mir seit dem Studium wohl am meisten gebracht hat (Neben Büchern über Design Patterns und Testing).