web-dev-qa-db-fra.com

Comment savoir quand la transition d'élément partagé se termine

Je travaille avec Shared Element Transitions entre les activités. La transition fonctionne bien, mais je veux savoir quand la transition d'élément partagé se terminera afin de pouvoir montrer autre chose.

J'ai essayé d'utiliser onSharedElementEnd dans SharedElementCallback dans l'activité vers laquelle je suis en transition mais celle-ci est appelée avant le début de la transition.

y a-t-il un autre rappel que je peux écouter?

26
tyczj

Avez-vous essayé de lier le programme d'écoute d'animation à la vue d'élément partagé dans onMapSharedElements? ViewCompat.animate(view) vous donnera une ViewPropertyAnimator(Compat) nouvelle ou en cache, et lier l'écouteur d'animation devrait être trivial. Je n'ai pas essayé, cependant.

setEnterSharedElementCallback(new SharedElementCallback() {
            @Override
            public void onMapSharedElements(List<String> names, Map<String, View> sharedElements) {
                super.onMapSharedElements(names, sharedElements);
                View keySharedElementView = sharedElements.get("keySharedElement");
                if(keySharedElementView != null){
                    ViewCompat.animate(keySharedElementView).setListener(new ViewPropertyAnimatorListenerAdapter(){
                        @Override
                        public void onAnimationEnd(View view) {
                            super.onAnimationEnd(view);
                        }
                    });
                }
            }
        });

Qu'en est-il de l'ajout de Transition.Listener à la transition d'élément partagé?

 Transition sharedElementEnterTransition = getWindow().getSharedElementEnterTransition();
 sharedElementEnterTransition.addListener(new TransitionListenerAdapter() {
         @Override
          public void onTransitionEnd(Android.support.transition.Transition transition) {
                    super.onTransitionEnd(transition);
           }
      });
30
Nikola Despotoski

S'il vous plaît essayez de rappeler onEnterAnimationComplete() sur votre activité.

Je parie que c'est exactement ce que vous cherchiez.

 @Override
    public void onEnterAnimationComplete() {
        super.onEnterAnimationComplete();

    //your code 
    }
16
Alex Wih

Voici ce que je fais dans un fragment:

Transition sharedElementEnterTransition = getActivity().getWindow().getSharedElementEnterTransition();
    sharedElementEnterTransition.addListener(new Transition.TransitionListener() {
        @Override
        public void onTransitionStart(Transition transition) {

        }

        @Override
        public void onTransitionEnd(Transition transition) {

        }

        @Override
        public void onTransitionCancel(Transition transition) {

        }

        @Override
        public void onTransitionPause(Transition transition) {

        }

        @Override
        public void onTransitionResume(Transition transition) {

        }
    });
4
Kai Wang

Essayez d’ajouter TransitionListener au fragment A, pas à B. Et utilisez Android.support.transition.Transition

Fragment A

            val anim = DetailsTransition()
            anim.addListener(object : Android.support.transition.Transition.TransitionListener
            {
                override fun onTransitionEnd(transition: Android.support.transition.Transition) {
                }

                override fun onTransitionResume(transition: Android.support.transition.Transition) {
                }

                override fun onTransitionPause(transition: Android.support.transition.Transition) {
                }

                override fun onTransitionCancel(transition: Android.support.transition.Transition) {
                }

                override fun onTransitionStart(transition: Android.support.transition.Transition) {
                }

            })