2016-07-24 3 views
0

私は2つのアクティビティABにSharedElementを持っています。 Activity AActivity Bで始まり、その遷移を待機する場合は、終了するリスナーと再入力の両方が呼び出されます。Window#getSharedElementTransition()を理解する

ここで呼び出すActivity Aのためのコード:

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     getWindow().getSharedElementReenterTransition().addListener(new Transition.TransitionListener() { 
      @Override 
      public void onTransitionStart(Transition transition) { 
       Log.i("Log", "A REENTER"); 
      } 

      ... 
     }); 

     getWindow().getSharedElementExitTransition().addListener(new Transition.TransitionListener() { 
      @Override 
      public void onTransitionStart(Transition transition) { 
       Log.i("Log", "A EXIT"); 
      } 

      ... 
     }); 

     getWindow().getSharedElementEnterTransition().addListener(new Transition.TransitionListener() { 
      @Override 
      public void onTransitionStart(Transition transition) { 
       Log.i("TestApp", "A ENTER"); 


      } 

      ... 
     }); 
     getWindow().getSharedElementReturnTransition().addListener(new Transition.TransitionListener() { 
      @Override 
      public void onTransitionStart(Transition transition) { 
       Log.i("TestApp", "A RETURN"); 
      } 

      ... 
     }); 


    } 

    public void onClick(View v){ 
     Intent intent = new Intent(this, Act2.class); 
     Pair<View, String> pair1 = Pair.create(findViewById(R.id.textView), findViewById(R.id.textView).getTransitionName()); 
     ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(this, pair1); 
     startActivity(intent, options.toBundle()); 
    } 
} 

私は今(Activity Bを開始する)onClick()を実行し、その後Activity Aに戻るには、戻るボタンをヒットした場合、次のように、ログは次のようになります。

A REENTER 
A EXIT 
B ENTER 
B RETURN 
B ENTER 
B RETURN 
A REENTER 
A EXIT 

私はそれがあることを期待する

A EXIT 
B ENTER 
B RETURN 
A REENTER 

答えて

0

は、私は同様の問題に遭遇し、それが再入力 遷移期間よりも長くかかる場合、共有要素の戻り遷移が中断されることになりロリポップのバグがありsimilar question

を見つけました。再入力の遷移時間を (呼び出し側アクティビティで)調整すると、中断の問題が修正されます。

方が良い共有要素遷移とリターンを入力してください。

+0

私のトランジションは、上記のコードだけで構成されています。だから、彼らは長くかかるべきではありません。また、onExitとonReenterの間に別のことをする必要がある場合、それが私を助けますか? [私はより多くの情報を提供するために元の投稿を調整しました。 ] – AljoSt

1

デフォルトでは、exitトランジションとreenterトランジション、およびenterトランジションとリターントランジションの両方に同じトランジションが使用されます。明示的に設定すると、それらは異なるでしょう。

私はあなたが同じトランジションにリスナーを追加していると信じているので、それらはすべて呼び出されています。

+0

ありがとう。明示的に設定されていなければ同じであることを数回は読んでも、両方のリスナーが呼び出されるとは思いませんでした。奇妙に思える – AljoSt