2016-07-24 58 views
0

我有兩個活動AB其中有一個SharedElement。如果Activity A開始Activity B並監聽轉換,則會調用退出和重新輸入的監聽器。瞭解窗口#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()); 
    } 
} 

如果現在執行onClick()(開始Activity B),然後點擊後退按鈕返回到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

默認情況下,相同的轉換用於退出和重新輸入轉換以及輸入和返回轉換。如果你明確地設置它們,它們將會不同。

我相信你正在爲相同的轉換添加監聽器,所以他們都被調用。

+0

非常感謝。即使我讀了幾次,如果沒有明確設定,他們也是一樣的,但我沒有想到兩個聽衆都會被調用。看起來很奇怪 – AljoSt