1

J'essaie d'exclure un groupe de vues, disons que la vue recycleur provient de la transition de retour d'élément partagé. Mais la chose est que je ne veux pas que tous les enfants de la vue recycleur excluent que je veux que l'enfant spécifique du recycleur voit la transition.Exclure ViewGroup de la transition sauf un enfant spécifique

Slide transition = new Slide(Gravity.END); 
transition.excludeTarget(recyclerView, true); 
transition.addTarget(ImageView.class); 
setExitTransition(transition); 
setReturnTransition(transition); 

Je ne comprends pas pourquoi le code ci-dessus ne fonctionne pas. S'il vous plaît laissez-moi savoir si vous avez des idées ou un moyen d'y parvenir?

+0

Qu'obtenez-vous avec ce code? – azizbekian

+0

il exclut tout recyclerview entier. Il y a une imageview dans un de mes articles de recyclage. Il ne respecte pas ce 'transition.addTarget (ImageView.class);' – santalu

Répondre

1

Quel est le problème?

Le problème provient de la fonction Transition#captureValues()if déclarations:

 

    void captureValues(ViewGroup sceneRoot, boolean start) { 
     clearValues(start); 
     if ((mTargetIds.size() > 0 || mTargets.size() > 0) 
       && (mTargetNames == null || mTargetNames.isEmpty()) 
       && (mTargetTypes == null || mTargetTypes.isEmpty())) { 
      ... 
     } else { 
      captureHierarchy(sceneRoot, start); 
     } 
     ... 
    } 
 

La première déclaration ne passe pas, ainsi le cas else est exécuté, ce qui rend votre addTarget(ImageView.class) à dédaigner.

Pourquoi la première instruction ne passe-t-elle pas?

Parce que addTarget(Class)will change champ mTargetTypes, donc à la fois mTargetIds et mTargets serait laissé vide.

Au lieu de cela, exécutez addTarget(int), will changemTargetIds.

Ainsi, voici ce que votre transition ressemblera:

 

    Slide transition = new Slide(Gravity.END); 
    transition.addTarget(R.id.some_imageview); 
    setExitTransition(transition); 
    setReturnTransition(transition); 
 

Pas besoin d'effectuer transition.excludeTarget(), car comme indiqué dans addTarget() docs:

Réglage targetIds contraignent la transition à l'écoute uniquement, et agir sur, vues avec ces ID. Les vues avec des ID différents, ou aucun ID, seront ignorées.

+0

Merci pour la bonne explication. Si le groupe de vues a un arrière-plan, cela ajoute encore l'arrière-plan à la transition. Avez-vous des idées pourquoi? – santalu

+0

Pouvez-vous poster un gif avec ce comportement? – azizbekian

+0

Je suis désolé je viens de réaliser qu'il fonctionne comme prévu. Mais mon problème actuel reste. J'essaye d'implémenter l'animation de retrait sur recyclerview. J'ai viewPager en tant qu'élément de vue recycleur. Et viewPager contient une imageview. J'essaye de faire une transition de diapositive si la position de viewPager est plus grande que 0. Mais c'est en quelque sorte ne fait pas la transition de diapositive. Vous pouvez le voir depuis le [gif] (https://media.giphy.com/media/tV1PsEnENNR3G/giphy.gif). J'apprécierai vraiment si vous pouvez m'aider ou me donner des idées à ce sujet. Sinon, je vais juste accepter votre réponse telle qu'elle est. – santalu