finishAfterTransition()无法正常工作

时间:2017-09-11 09:33:44

标签: android android-animation android-transitions

在我的应用程序中,我想要从活动A到活动B的通道动画。特别是,我希望活动A滑出,活动B在点击按钮时淡入,单击后退按钮时,活动B淡出,活动A滑入。 好吧,第一个动画(滑出 - 淡入)工作正常。但是,当我单击后退按钮时,有时会触发动画,但大多数时候我看到活动B和空白屏幕淡出,活动A根本没有出现。 可能有什么不对?这是我的代码:

活动A:

      @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            setupWindowAnimations();
        }
...
}
@Override
protected void setupWindowAnimations() {

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
    Slide slide = new Slide();
    slide.setDuration(1000);
    slide.setSlideEdge(Gravity.RIGHT);
    getWindow().setExitTransition(slide);
    getWindow().setReenterTransition(slide);
}

}

活动B:

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setLayout(R.layout.file_browser);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        setupWindowAnimations();
    }
 ...}
 @Override
protected void setupWindowAnimations() {
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
        Fade fade = new Fade();
        fade.setDuration(1000);
        getWindow().setEnterTransition(fade);
        getWindow().setReturnTransition(fade);

    }
}

点击从活动A开始活动B的按钮:

   fab.setOnClickListener(new View.OnClickListener() {
        @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
        @Override
        public void onClick(View v) {
            ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(ActivityA.this);
            Intent intent = new Intent(ActivityA.this,ActivityB.class);
            startActivity(intent, options.toBundle());

        }});

后退按钮的方法:

 @Override
public boolean onSupportNavigateUp(){

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

        finishAfterTransition();

    }
    return true;

}
我可能错过了一些东西。我希望你能帮助我解决这个问题。 提前谢谢!

1 个答案:

答案 0 :(得分:0)

在活动B中放置 getWindow()。setAllowEnterTransitionOverlap(false); ,如下所示:

protected void setupWindowAnimations() {
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
        Fade fade = new Fade();
        fade.setDuration(1000);
        getWindow().setEnterTransition(fade);
        getWindow().setReturnTransition(fade);
        getWindow().setAllowEnterTransitionOverlap(false);

    }
}