J'ai une application avec plusieurs activités "normales" pouvant courir sur le paysage ou le portrait. Ils sont conçus pour et surtout utilisés sur le portrait.
Cette application dispose d'une seule activité qui utilise la caméra et est verrouillée sur le paysage. Je "simuler" cette activité est sur le portrait en faisant pivoter des images et des textes à 90 degrés, il ressemble donc au reste des activités.
Sur certains périphériques, tels que Samsung Galaxy Tab 7 et Galaxy S3, une animation de rotation est affichée lorsqu'il passe d'une activité de portrait normale à l'activité de paysage de la caméra et à l'arrière . Ceci est déroutant pour l'utilisateur car l'activité paysagère simule être sur portrait.
Existe-t-il un moyen de supprimer cette animation de rotation ? Idéalement, j'aimerais changer de portrait par défaut à l'animation des portraits, mais il suffirait d'éliminer la rotation d'animation.
J'ai essayé
overridePendingTransition(0, 0);
une autre variation de cette méthode sans succès.
[AJOUTÉE]
Suivant les suggestions de @igalarzab, @georg et @joe, je l'ai fait (toujours sans chance):
J'ai eu ces résultats:
[VIDÉO]
J'ai téléchargé une vidéo qui montre une animation que je veux désactiver. Cela se produit lorsque vous changez d'activité de caméra (verrouillée au paysage) vers une autre activité tout en maintenant téléphone sur portrait:
C'est la façon dont l'application de la caméra stock désactive l'animation de rotation:
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 Référence API et commentaire ci-dessous, cela ne fonctionne que:
FLAG_FULLSCREEN
le drapeau est défini pour WindowManager.LayoutParams
de l'activitéVous pouvez installer dans l'androidmanifest une propriété appelée Android:configChanges
Où vous pouvez décider quels changements vous souhaitez gérer dans le code. De cette manière, l'animation de changement de rotation sera désactivée et vous pouvez le 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" />
J'ai mis cela dans la principale et elle a annulé l'animation de rotation:
@Override
public void setRequestedOrientation(int requestedOrientation) {
super.setRequestedOrientation(requestedOrientation);
int rotationAnimation = WindowManager.LayoutParams.ROTATION_ANIMATION_JUMPCUT;
Window win = getWindow();
WindowManager.LayoutParams winParams = win.getAttributes();
winParams.rotationAnimation = rotationAnimation;
win.setAttributes(winParams);
}
Plus de détails ici .
Vous auriez 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'ai pas eu de dispositif de galaxie à tester avec :)