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

时间:2017-04-27 11:49:32

标签: java android android-navigation

我试图对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类。如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

我总是在onFinish方法中使用这种动画:

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

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

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

答案 1 :(得分: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);
}