簡體   English   中英

取消共享元素轉換

[英]Canceling shared element transition

我有兩個活動(A和B),當我點擊一個按鈕時,A中的元素開始動畫過渡到B.但是,我想要從B回到A時禁用向后播放的相同過渡。

在提出這個問題之前,我研究了Internet,發現有兩種方法setSharedElementReturnTransition(transition)setSharedElementReenterTransition(transition) 這些方法在適當的活動onCreate()方法中調用,其中transition = null並且不起作用。

我找到的唯一解決方案是,取消轉換,在onBackPressed()調用finish() onBackPressed()而不是super.onBackPressed() 有沒有其他方法可以實現理想的行為?

總而言之,當我將向后轉換設置為null時,沒有任何改變 - 轉換未被覆蓋。

編輯1.這是一個代碼:

ActivtyA.java

 public class ActivityA {

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

    ...

            @Override
            public void onPersonalProfileEditIconClicked() {
                Intent intent = new Intent(ActivityA.this, ActivityB.class);

                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {

                      View sharedView = avatarView;

                      String sharedElementName = getString(R.string.profile_avatar);
                      ActivityOptions transitionActivityOptions = ActivityOptions.makeSceneTransitionAnimation
                                (ActivityA.this, sharedView, sharedElementName);
                      startActivity(intent, transitionActivityOptions.toBundle());
                } else startActivity(intent);
            }
}  

ActivityB.java

public class ActivityB {

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

    ...

    @Override
    public void onBackPressed() {
        finish();
    }
}  

在XML文件(activity_A和activity_B)中,sharedView具有屬性transitionName。

的themes.xml

<resources>
    <style name="theme" parent="Theme.AppCompat.Light.NoActionBar">
        ...
        <item name="android:windowActionModeOverlay">true</item>
        <item name="android:windowContentTransitions">true</item>
    </style>
</resources>

更新支持庫后,可以取消共享元素轉換,而無需更改super.onBackPressed(); finish();

只有你需要設置(在我的情況下)返回/重新進入轉換為null並更改視圖上的轉換名稱。

getWindow().setSharedElementReturnTransition(null); getWindow().setSharedElementReenterTransition(null); view.setTransitionName(null);

您可以使用以下代碼獲得所需的輸出: ActivityA.java

private void startActivityB(){
    startActivity(new Intent(ActivityA.this, ActivityB.class));
    overridePendingTransition(R.anim.slide_left_to_right, R.anim.slide_right_to_left);
  }

無需編寫額外的代碼ActivityB.java

@Override
public void onBackPressed() {
    //TODO
}

要么

如果你想在啟動ActivityB之后完成ActivityA
ActivityA.java

private void startActivityB(){
      startActivity(new Intent(this, ActivityB.class));
      overridePendingTransition(R.anim.slide_left_to_right, R.anim.slide_right_to_left);
      finish();
} 

ActivityB.java

@Override
public void onBackPressed() {
    startActivity(new Intent(ActivityB.this, ActivityA.class));
    overridePendingTransition(R.anim.slide_right_to_left, R.anim.slide_left_to_right);
    finish();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM