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);
}
我正在尝试对 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);
}