TL;DR: je suis à la recherche d'un travail complet de l'échantillon de ce que j'appellerai "l'Gmail trois-fragment d'animation" scénario. Plus précisément, nous voulons commencer avec deux fragments, comme ceci:
Lors d'un événement l'INTERFACE utilisateur (par exemple, en tapant sur quelque chose dans le Fragment B), nous voulons:
- Fragment d'Un glisser hors de l'écran vers la gauche
- Fragment B de glisser vers le bord gauche de l'écran et rétrécir à prendre la place vacante par le Fragment d'Un
- Le Fragment C de glisser le bord droit de l'écran et de prendre la place vacante par le Fragment B
Et, sur un bouton de RETOUR de la presse, nous voulons que l'ensemble des opérations devant être inversé.
Maintenant, j'ai vu beaucoup de partielle implémentations, je vais examiner quatre d'entre eux ci-dessous. Au-delà d'être incomplètes, elles ont toutes leurs questions.
@Reto Meier ont contribué à cette populaire réponse à la même question de base, indiquant que vous pouvez utiliser setCustomAnimations()
avec un FragmentTransaction
. Pour un deux-fragment de scénario (par exemple, vous ne voyez qu'Un Fragment d'abord, et que vous voulez le remplacer par un nouveau Fragment B à l'aide d'effets d'animation), je suis tout à fait d'accord. Cependant:
- Puisque vous ne pouvez spécifier qu'un "in" et un "dehors" de l'animation, je ne vois pas comment vous pourriez faire face à toutes les animations nécessaires pour les trois-fragment de scénario
- L'
<objectAnimator>
dans son exemple de code utilise câblé positions en pixels, et qui semble pas pratique, compte tenu de diverses tailles d'écran, pourtant,setCustomAnimations()
nécessite d'animation de ressources, ce qui exclut la possibilité de définir ces choses en Java - Je suis à une perte quant à la façon dont l'objet de l'animation pour l'échelle de la cravate avec des choses comme
android:layout_weight
enLinearLayout
pour allouer de l'espace sur la base d'un pourcentage - Je suis à une perte quant à la façon dont le Fragment C est gérée au départ (
GONE
?android:layout_weight
de0
? pré-animation d'une échelle de 0? quelque chose d'autre?)
@Roman Nurik points que vous pouvez animer toute propriété, y compris ceux que vous définissez vous-même. Qui peut aider à résoudre le problème de la filaire de positions, au prix d'inventer votre propre mise en page personnalisée gestionnaire de sous-classe. Qui aide à certains, mais je suis toujours sidéré par le reste de Reto de la solution.
L'auteur de ce pastebin entrée montre certaines alléchantes pseudo-code, ce qui revient à dire que tous les trois fragments réside dans le conteneur d'abord, avec le Fragment C cachés au départ par l'intermédiaire d'un hide()
opération de transaction. Nous avons ensuite show()
C et hide()
lorsque l'INTERFACE utilisateur de l'événement se produit. Cependant, je ne vois pas comment il gère le fait que B des changements de taille. Il s'appuie également sur le fait que, apparemment, vous avez peut ajouter plusieurs fragments de la même conteneur, et je ne suis pas sûr de savoir si ou non la fiabilité de comportement sur le long terme (pour ne pas mentionner il devrait casser findFragmentById()
, mais je peux vivre avec ça).
L'auteur de ce blog indique que Gmail n'est pas à l'aide de setCustomAnimations()
, mais plutôt directement utilise l'objet d'animateurs ("vous venez de changer de marge de gauche de la vue racine + changement de la largeur de la vue de droite"). Cependant, c'est toujours un deux-fragment solution AFAICT, et la mise en œuvre une fois de plus montré dur-fils dimensions en pixels.
Je vais continuer à bosser à cette, afin que je puisse la liquidation de répondre à cette question à moi-même un jour, mais je suis vraiment en espérant que quelqu'un a travaillé sur les trois-fragment de solution pour cette animation scénario et peux poster le code (ou un lien de celui-ci). Animations dans Android me faire tirer mes cheveux, et ceux d'entre vous qui m'ont vu savent que c'est une grande partie stériles effort.
Merci à l'avance!