Android - 如何在按下默认后退按钮时为活动转换设置动画

Tia*_*ago 41 animation android transition button back

在我的活动中,我有一个按钮,其中包含以下点击监听器:

final ImageButton startOverButton = (ImageButton) findViewById(R.id.start_over_button);
startOverButton.setOnClickListener(new View.OnClickListener(){

    @Override
    public void onClick(final View v) {

        finish();//go back to the previous Activity
        overridePendingTransition(R.anim.comming_in, R.anim.comming_out);
    }
});
Run Code Online (Sandbox Code Playgroud)

它以我想要的方式动画返回上一个活动.但是,当用户按下Android默认后退按钮时,不会触发动画.我的问题是:我应该在哪里放置动画代码overridePendingTransition(R.anim.comming_in,R.anim.comming_out); 这样当用户点击我的按钮和默认的Android后退按钮时,这个动画都会被触发?

作为一个天真的尝试,我试图把overridePendingTransition(R.anim.comming_in,R.anim.comming_out); onDestroy()方法中的代码行但它不起作用.

先感谢您!

Tao*_*ang 107

也许你可以在活动中的onBackPressed()方法中做这项工作.

@Override
public void onBackPressed() {
    super.onBackPressed();
    overridePendingTransition(R.anim.comming_in, R.anim.comming_out);   
}
Run Code Online (Sandbox Code Playgroud)

  • 实际上,你应该调用super.onBackPressed(),而不是假定功能. (11认同)
  • 在BaseActivity类中执行此操作,并从BaseActivity类扩展所有自定义Activity类.@zionpi (5认同)

小智 15

基本上覆盖onBackPressed是一种正确的方法,但不是从它调用finish(),我会说最好调用super.onBackPressed()然后添加overridePendingTransition,这样我们就可以更加符合继承规则了.

@Override
public void onBackPressed() {
    super.onBackPressed();
    overridePendingTransition(R.anim.comming_in, R.anim.comming_out);   
}
Run Code Online (Sandbox Code Playgroud)

  • 你可以在@TaoZang的回答中添加任何内容吗? (2认同)

ces*_*rds 8

即使覆盖onBackPressed()是一个不错的选择,我还是建议覆盖该finish()方法,以防万一活动以其他方式完成,例如导航操作或“破坏”活动的任何其他视图操作:

@Override public void finish() {
   super.finish();
   overridePendingTransition(0,0);
}
Run Code Online (Sandbox Code Playgroud)

我们需要考虑到这个方法会在按下后退按钮后被触发,所以我们很高兴:-)

更新:此外,onBackPressed()如果我们在其中使用片段,覆盖可能会弄乱 Activity,因为我们可能不想在每次按下后退时覆盖转换。