J'ai une activité qui montre une boussole et j'ai besoin de connaître l'orientation de l'écran pour faire pivoter correctement l'aiguille. Je dois faire la distinction entre une rotation de 90 ° et 270 ° pour bien le gérer.
Lorsque je fais pivoter l'écran (au moins sur mon Nexus S), la variable onCreate
de l'activité est appelée, par exemple. lorsque je passe du mode portrait au mode paysage. Lorsque je passe d'un mode paysage à l'autre avec le bord supérieur relevé, onCreate()
est appelé deux fois (une pour l'orientation portrait et une fois pour le mode paysage cible).
Cependant, lorsque je fais pivoter le bord inférieur vers le haut, l'écran pivote de 180 ° et onCreate
n'est pas appelé. Y at-il un événement qui se déclenche dans ce cas?
Vous avez raison, à une rotation de 180 degrés, vous ne serez pas redémarré ni modifié de configuration, car la configuration n'a pas été modifiée. (Il est toujours en paysage ou en portrait, et tout le reste est identique.)
Cependant, si vous montrez une boussole, cela signifie probablement que vous la mettez à jour à partir d'événements de capteurs. Ainsi, vous pouvez simplement appeler Display.getRotation () chaque fois que vous obtenez une mise à jour du capteur pour obtenir la rotation actuelle de l'écran. En fait, need correspond à la rotation de l'interprétation des événements de capteur (ou en fait à la façon dont votre dessin en sera modifié lorsqu'il sera affiché à l'écran), pas seulement à l'orientation.
J'ai trouvé un article de blog pertinent qui est vaut la peine d'être lu .
Assurez-vous de lire le documentation du SDK .
Consultez également la discussion sur l'utilisation de Display.getRotation () pour remapper correctement les coordonnées du capteur.
La classe d'aide OrientationEventListener facilite grandement les rappels en rotation. Je vous suggère d'essayer.
Comme l'a dit Monchote, pour faire pivoter votre aiguille comme prévu sur la boussole, il est préférable de verrouiller votre interface utilisateur sur un portrait ou un paysage, et modifiez l'angle de l'aiguille en fonction de l'angle de rotation du périphérique, qui peut être obtenu. facilement de OrientationListener .
Ainsi, que la fonctionnalité de rotation automatique soit ouverte ou non par l'utilisateur, vous pouvez toujours obtenir une notification de changement d'angle de rotation. Voici est un bon exemple pour votre référence.
Il suffit de jeter un coup d'œil à la Documentation SensorManager . Vous y trouverez les meilleurs exemples et explications sur la manière d'utiliser l'accéléromètre pour obtenir les informations les plus précises. Au lieu de créer des objets en détectant simplement l'orientation du téléphone, cette API permet d'obtenir la rotation exacte, comme dans les jeux de course comme Asphalt et Need For Speed.