overridePendingTransition(int, int) 对 onBackPressed() 没有任何影响

overridePendingTransition(int, int) does not have any effect in onBackPressed()

我正在尝试对 Android 的后退按钮进行编程,使其在按下时具有相反的滑动效果。

我有 MainActivity(a),按下某些内容会创建另一个 MainActivity(b)(并以编程方式设置不同的内容)。从 MainActivity(a) 到 MainActivity(b) 是从右侧滑入(然后向左滑出),这是正确的。

但是,当我单击“后退”按钮时,它应该从左侧滑入并(向右滑出)- 即。相反 - 但效果与上述相同。我想要按下后退回到上一画面的动画(左起)

这是我的代码:

@Override
public void onIndexFragmentInteraction(final IndexesRecyclerViewAdapter.ViewHolder viewHolder) {
    final Context thisContext = this;
    YoYo.with(Techniques.Pulse).onEnd(new YoYo.AnimatorCallback() {
        @Override
        public void call(Animator animator) {
            CelebritiesFragment celebritiesFragment = new CelebritiesFragment();
            celebritiesFragment.setIndex(viewHolder.index);
            CelebritiesTabViewsStack.getInstance().push(celebritiesFragment);
            Intent intent = new Intent(thisContext, MainActivity.class);
            startActivity(intent);
        }
    }).delay(0).duration(250).playOn(viewHolder.mView);
}

@Override
protected void onPause() {
    super.onPause();
    overridePendingTransition(R.animator.slide_in_right, R.animator.slide_out_left);
}

@Override
public void onBackPressed() {
    super.onBackPressed();
    overridePendingTransition(R.animator.slide_out_left, R.animator.slide_out_right);
// no effect, even if I use overridePendingTransition(0, 0);
}

我想问题是两者都是同一个 MainActiity class。如何解决这个问题?

我一直在onFinish方法中使用这种动画:

   public void finish() {
        super.finish();
         overridePendingTransition(R.animator.slide_out_left, R.animator.slide_out_right);
    }

另外,看看overridePendingTransition签名,它需要2个动画作为参数。

传入的第一个动画资源的资源IDactivity。使用 0 表示没有动画。 最后一个是用于传出的动画资源的资源ID activity。使用 0 表示没有动画。

经过多次实验,我自己找到了解决方案:

@Override
public void onIndexFragmentInteraction(final IndexesRecyclerViewAdapter.ViewHolder viewHolder) {

    final Context thisContext = this;
    YoYo.with(Techniques.Pulse).onEnd(new YoYo.AnimatorCallback() {
        @Override
        public void call(Animator animator) {
            CelebritiesFragment celebritiesFragment = new CelebritiesFragment();
            celebritiesFragment.setIndex(viewHolder.index);
            CelebritiesTabViewsStack.getInstance().push(celebritiesFragment);
            Intent intent = new Intent(thisContext, MainActivity.class);
            //finish();
            startActivity(intent);
            overridePendingTransition(R.animator.slide_in_right, R.animator.slide_out_left);
        }
    }).delay(0).duration(250).playOn(viewHolder.mView);
}

@Override
public void onBackPressed() {
    super.onBackPressed();
    overridePendingTransition(0, R.animator.slide_out_right);
}