web-dev-qa-db-ja.com

共有要素の移行がいつ終了するかを知る方法

私はShared Element Transitionsアクティビティ間。移行は正常に機能していますが、共有要素の移行がいつ終了するかを知りたいので、他のものを表示できます。

移行先のアクティビティでonSharedElementEndSharedElementCallbackを使用しようとしましたが、移行が開始される前に呼び出されます。

私が聞くことができる別のコールバックはありますか?

27
tyczj

onMapSharedElements内の共有要素ビューにアニメーションリスナーをバインドしようとしましたか? ViewCompat.animate(view)は、新規またはキャッシュされたViewPropertyAnimator(Compat)を提供し、アニメーションリスナーのバインドは簡単です。しかし、私はそれを試していません。

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);
                        }
                    });
                }
            }
        });

Transition.Listenerを共有要素の遷移に追加するのはどうですか?

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

アクティビティでonEnterAnimationComplete()コールバックを試してください。

これはまさにあなたが探しているものだと思います。

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

    //your code 
    }
18
Alex Wih

これが私が断片的に行うことです:

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) {

        }
    });
6
Kai Wang

BではなくフラグメントAにTransitionListenerを追加してみてください。そして、Android.support.transition.Transition

フラグメント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) {
                }

            })