42 votes

Désactiver l'animation par défaut de Portrait en Paysage

J'ai une application avec plusieurs activités 'normales', et qui peut fonctionner soit en mode paysage ou portrait. Elles sont conçues pour être principalement utilisés sur le portrait.

Cette application a une seule activité qui utilise la caméra et est verrouillé sur le paysage. J' "simuler" cette activité est sur le portrait par la rotation d'images et de textes de 90 degrés, de sorte qu'il ressemble le reste des activités.

Sur certains appareils, tels que les Samsung Galaxy Tab 7 et le Galaxy S3, une rotation de l'animation est affichée lorsque vous allez à partir d'un portrait de l'activité à l'appareil photo de paysage de l'activité et à l'arrière. Ceci est source de confusion pour l'utilisateur parce que le paysage de l'activité simule d'être sur le portrait.

Est-il un moyen de supprimer cette rotation de l'animation? Idéalement, j'aimerais changer de défaut portrait de portrait de l'animation, mais juste de retirer la rotation de l'animation serait suffisant.

J'ai essayé

overridePendingTransition(0, 0);

une des variantes de cette méthode, sans succès.

[AJOUTÉ]

Suggestions suivantes par @igalarzab, @Georg et @Joe, je l'ai fait (toujours sans succès):

  • Ajouté android:configChanges="orientation|screenSize" à Manifester
  • Ajouté onConfigurationChanged
  • Créé un mannequin d'animation qui n'a rien et a ajouté overridePendingTransition(R. anim.rien, R. anim.rien);

J'ai eu ces résultats:

  • onConfigurationChanged est appelée uniquement lors de la rotation de même de l'Activité (Activité sur le portrait -> Activité sur le paysage). Mais il ne s'appelle pas lorsqu'on passe d'Une Activité sur le portrait -> Activité B sur le paysage
  • Cela a empêché l'Activité d'être redémarré lors de la rotation, mais il n'a PAS supprimé la rotation de l'animation (testé sur Galaxy S3, Galaxy Nexus, Galaxy Tab 7.0 et Galaxy Tab 10.1)
  • overridePendingTransition(R. anim.rien, R. anim.rien n'); suppression de la normale de transitions (portrait->portrait et paysage->paysage), mais il n'a pas supprimé la rotation de l'animation (le portrait->paysage et vice-versa).

[VIDÉO]

J'ai téléchargé une vidéo qui montre l'animation je veux désactiver. Ce qui se passe lors d'un changement d'activité de la caméra (verrouillé en mode paysage) à d'autres activités tout en maintenant le téléphone sur le portrait:

http://youtu.be/T79Q1P_5_Ck

26voto

hackbod Points 55292

Désolé, il n'y a aucun moyen de contrôler l'animation de rotation. Cela se fait bien en dehors de votre application, profondément dans le gestionnaire de fenêtres où il prend une capture d'écran de l'écran actuel, redimensionne et reconstruit l'interface utilisateur derrière celle-ci, puis exécute une animation intégrée pour passer de la capture d'écran d'origine à la nouvelle reconstruction. UI. Il n'y a aucun moyen de modifier ce comportement lorsque la rotation de l'écran change.

23voto

martinpelant Points 1055

C'est de cette façon que le stock app appareil photo désactive la rotation de l'animation:

private void setRotationAnimation() {
    int rotationAnimation = WindowManager.LayoutParams.ROTATION_ANIMATION_CROSSFADE;
    Window win = getWindow();
    WindowManager.LayoutParams winParams = win.getAttributes();
    winParams.rotationAnimation = rotationAnimation;
    win.setAttributes(winParams);
}

Remarque: Selon la Référence de l'API et de commentaire ci-dessous, cela ne fonctionne que:

  • Sur l'API de niveau 18 ou au-dessus
  • L' FLAG_FULLSCREEN indicateur est défini pour WindowManager.LayoutParams de l'Activité
  • L'Activité n'est pas couverte par une autre fenêtre (par exemple, l'Arrêt popup déclenchée en appuyant longuement sur le bouton d'Alimentation)

2voto

igalarzab Points 283

Vous pouvez définir dans l'AndroidManifest une propriété appelée android:configChanges où vous pouvez décider des modifications que vous souhaitez gérer dans le code. De cette manière, l'animation de changement de rotation sera désactivée et vous pourrez la gérer comme vous le souhaitez dans la méthode onConfigurationChanged de votre Activity .

 <activity
    android:name=".MySuperClass"
    android:label="@string/read_qrcode"
    android:screenOrientation="portrait"
    android:configChanges="orientation" />
 

0voto

Joe Points 8976

Vous avez peut-être déjà essayé cela, mais juste au cas où:

Essayez de définir une animation "ne rien faire" et appelez overridePendingTransition() avec son identifiant. Peut-être quelque chose comme:

     <set xmlns:android="http://schemas.android.com/apk/res/android" 
         android:fillAfter="true">
        <translate
            android:fromXDelta="0"
            android:toXDelta="0"
            android:duration="100" />
    </set>
 

Désolé, je n'avais pas d'appareil Galaxy à tester :)

-1voto

Rcp Points 21

Si vous souhaitez définir vos activités en mode portrait uniquement, vous pouvez le faire dans votre fichier manifeste comme ceci

  <activity
     android:name=".Qosko4Activity"
     android:label="@string/app_name"
     android:screenOrientation="portrait" >
     <intent-filter>
         <action android:name="android.intent.action.MAIN" />
         <category android:name="android.intent.category.LAUNCHER" />
     </intent-filter>
 </activity>
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X