2015-11-10 15 views
18

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

onSharedElementEndSharedElementCallbackで使用しようとしましたが、私は移行中ですが、移行が開始される前に呼び出されます。

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

答えて

16

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

のみ第2の解決策は、私のために働きました。 –

+2

不思議なことに、 'TransitionListenerAdapter'は' Transition.TransitionListener'インターフェースの空の実装に過ぎません。それは@ alex-lockwoodの公開プロジェクトから取られる可能性が高い:https://github.com/alexjlockwood/activity-transitions/blob/master/app/src/main/java/com/alexjlockwood/activity/transitions/TransitionListenerAdapter。 java – gnuf

+1

@gnufインターフェイスのアダプタは、必要なメソッドだけを実装できるようにするためのものです。これはandroid sdkとjavaのすべてのリスナーアダプタで一般的です。これはあなたのコードをきれいに整えます。 –

10

あなたの活動にはonEnterAnimationComplete()コールバックをお試しください。

これはまさにあなたが探していたものです。ここで

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

    //your code 
    } 
+1

見た目はいいですが、フラグメントトランジションでどのように使用するかについての提案はありますか? –

+0

どのように使用しますか?私は – kemdo

2

は、私がフラグメントに何をすべきかです:

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

     } 
    }); 
+0

あなたがこれが間違っていることに応じて知っていません。 SharedElementTransitionでフラグメントトランザクションを開始する場合は、断片化したgetActivity()。getWindow()を使用せずに直接getSharedElementEnterTransition()を呼び出す必要があります。onAttach() –

+0

こんにちは。このフラグメントは、トランザクションの開始ではなく、終了です。これは結末のための良い練習ですか?ありがとう、 –

+0

はい、私はこれを私の断片で好きです。 fragmentAがFragmentBを呼び出すと、これはfragmentBになります。 –

関連する問題