Travail complet de l'Échantillon de l'Gmail Trois-Fragment d'Animation de Scénario?

TL;DR: je suis à la recherche d'un de 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:

Travail complet de l'Échantillon de l'Gmail Trois-Fragment d'Animation de Scénario?

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 contribué cette 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
  • La <objectAnimator> dans son exemple de code utilise câblé positions en pixels, et qui semble pas pratique, compte tenu de diverses tailles d'écran, mais 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 dans un LinearLayout 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 de 0? pré-animation d'une échelle de 0? quelque chose d'autre?)

@Roman Nurik souligne que vous pouvez animer toute la 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() Un 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(), si je peux vivre avec ça).


L'auteur de ce blog indique que Gmail n'est pas à l'aide de setCustomAnimations() à tous, 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.

  • N'est-il pas quelque chose de ce genre posté par Romain Guy? curious-creature.org/2011/02/22/...
  • Il n'est pas à l'aide de fragments AFAICT. Visuellement, c'est le droit de base de l'effet, et je peut être en mesure de l'utiliser pour un autre point de données pour essayer de créer un fragment de réponse. Merci!
  • Juste une pensée: le standard de l'application e-Mail est similaire (mais pas identique) comportement sur mon Nexus 7 — qui devrait être open source.
  • L'application de Messagerie électronique utilise une coutume "ThreePaneLayout" qui anime la position de la gauche de la Vue, et la largeur et de la visibilité des deux autres points de Vue — qui contiennent pertinentes Fragment.
  • C'est très intéressant. Je n'ai pas utilisé le PSBA application e-Mail, donc je ne savais pas qu'ils ont utilisé la même INTERFACE utilisateur de base de la structure il y a comme avec Gmail. Notez que je n'ai aucun moyen de l'attribution d'une prime à un commentaire, vous pouvez envisager la rédaction d'une réponse avec vos pensées sur le ThreePaneLayout mise en œuvre. Merci!
  • pouvez-vous me dire les Fragments A et B sont-ils mesurés? est-il sur linearLayout avec le poids de l'attribut? Par rapport à la norme de DPs , le Fragment A est wrap_content et B remplit le reste de l'écran? Aussi Dessiné la mise en cache est-elle autorisée ? ( ce qui signifie que les mises en page ne peut pas mettre à jour lors de l'animation)
  • - vous me dire les Fragments A et B sont-ils mesurés?" -- une de vos approches, ce serait bien, même si j'ai une légère préférence pour le LinearLayout/poids de l'approche. "Aussi Dessiné la mise en cache est-elle autorisée ? ( ce qui signifie que les mises en page ne peut pas mettre à jour lors de l'animation)" -- :: haussement d'épaules :: en dehors de peut-être à l'aide de couches de matériel dans les versions ultérieures d'Android, je n'ai pas donné cet aspect de beaucoup de pensée.
  • ont une légère préférence pour le LinearLayout/poids de l'approche" de manière personnalisée (bootstrap style) ViewGroup qui sépare la largeur de l'écran avec N égal unités et chaque fragment prend x*N largeur de l'espace est autorisé.(Près de quel poids, mais un peu plus contrôlable)
  • Le contrôle est la clé de la chose, en particulier de contrôle qui peut être basée sur l'espace disponible dans le conteneur global (vs le calcul d'un tas de valeurs de dimension, comme le PSBA application de Messagerie électronique de l'est). Cependant, "N unités égales" n'est certainement pas ce que je recherche, car l'obtention du Fragment B de redimensionner à ce Fragment d'Une taille a été est une touche délicate pièce de ce puzzle.
  • hey @CommonsWare je ne vais pas la peine ppl avec toute ma réponse ici, mais il y a une question similaire à la vôtre, en qui j'ai donné un très de réponse satisfaisante. Donc, juste une suggestion à vous de le vérifier (vérifiez également les commentaires): stackoverflow.com/a/14155204/906362

InformationsquelleAutor CommonsWare | 2012-09-03