Question

J'ai une activité qui montre une boussole, et je dois connaître l'orientation de l'écran pour faire tourner correctement l'aiguille. Je dois faire la distinction entre une rotation de 90 ° et 270 ° degré pour gérer correctement ce sujet.

Quand je tourne l'écran (sur mon Nexus S au moins) le onCreate de l'activité est appelée, par exemple quand je tourne du mode portrait au mode paysage. Lorsque je tourne d'un mode de paysage à l'autre avec le bord de la partie supérieure soulevée, onCreate() est appelé deux fois (une fois pour une orientation portrait et une fois pour le mode paysage cible).

Cependant, quand je tourne avec le bord inférieur, l'écran pivote à 180 ° et onCreate n'est pas appelé. Y at-il un événement qui se fera virer dans ce cas?

Était-ce utile?

La solution

Vous avez raison à une rotation de 180 degrés, vous ne serez pas redémarré ou obtenir un changement de configuration, car la configuration n'a pas réellement changé. (Il est encore en mode paysage ou portrait, et tout le reste est le même.)

Toutefois, si vous montrez une boussole, cela doit signifier que vous le mettez à jour des é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 que vous besoin est la rotation de l'interprétation des événements de capteur (ou en fait la façon dont votre dessin d'entre eux sera modifié quand il est à l'écran), et pas seulement l'orientation.

J'ai trouvé un billet de blog pertinent qui est vaut lecture.

Assurez-vous de lire le SDK documentation .

Consultez également la discussion sur l'utilisation de Display.getRotation () pour les coordonnées du capteur correctement remappage.

Autres conseils

La classe aide OrientationEventListener rend très facile d'obtenir des rappels sur la rotation. Je vous suggère de l'essayer.

Il suffit de jeter un oeil à la SensorManager Documentation , il vous pouvez obtenir les meilleurs exemples et des explications sur la façon d'utiliser l'accéléromètre pour obtenir des informations les plus précises. Au lieu de faire les choses simplement en détectant l'orientation du téléphone, avec cette API, vous pouvez obtenir la rotation exactement, comme utilisé par les jeux de course comme Asphalt et Need For Speed.

Comme Monchote dit, afin de rendre votre rotation de l'aiguille comme prévu sur la boussole, il est préférable de verrouiller votre interface utilisateur en mode portrait ou paysage , et changer votre angle d'aiguille selon l'angle de rotation du dispositif, qui peut être gagné facilement de OrientationListener .

De cette façon, peu importe la fonction de rotation automatique est ouvert ou non par l'utilisateur, vous pouvez toujours obtenir l'angle de rotation de notification de changement. est un bon exemple pour votre référence.

Jetez un oeil à la méthode OnConfigurationChanged traquer le changement d'orientation et réarranger votre interface utilisateur au besoin.

voir exemple de code

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top