在我的应用程序中,我想要从活动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;
}
我可能错过了一些东西。我希望你能帮助我解决这个问题。
提前谢谢!
答案 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);
}
}