如何向活动结束添加动画()

b-r*_*yce 93 animation android android-activity

我正在使用overridePendingTransition来创建我的活动并且工作正常我可以看到淡入效果非常好,但是当我尝试为活动完成动画时,它仍然是默认的向右滑动.

我在开始活动时首先尝试定义out动画,如下所示:

Intent myIntent = new Intent(a, SkdyAlert.class);
    myIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
    a.startActivity(myIntent);
    if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.DONUT) {
        AnimationHelper.overridePendingTransition(a, R.anim.fadein, R.anim.fadeout);
    }
Run Code Online (Sandbox Code Playgroud)

然后我也尝试在完成活动时这样做

okBtn.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            finish();
            if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.DONUT) {
                AnimationHelper.overridePendingTransition(activity, 0, R.anim.fadeout);
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

但这些方法都不会阻止退出动画的"从右到左"幻灯片.关于我做错了什么的任何想法?

Goo*_*ead 219

我在调用finish()之后重写了挂起的转换;

就我而言,我已经做到了避免过渡.

finish();
Details.this.overridePendingTransition(R.anim.nothing,R.anim.nothing);
Run Code Online (Sandbox Code Playgroud)

订单很重要:)

  • 您可以覆盖`finish()`方法以避免所有情况下的转换(按下后退按钮,作为示例):`@Override public void finish(){super.finish(); overridePendingTransition(0,0); }` (21认同)
  • `R.anim.nothing`看起来怎么样? (8认同)
  • 通过"详情",@ Goofyahead正在命名他的封闭活动 - ymmv.这个技术对我有用,可以在2.x上替换Theme.Dialog中的动画,但不能替换3.x或4.x (5认同)

Pab*_*nez 22

我建议使用isFinishing()方法在onPause上配置动画而不是调用finish()

@Override
protected void onPause() {
    super.onPause();
    if (isFinishing()){
        overridePendingTransition(R.anim.activity_slide_in, R.anim.activity_slide_out);
    }

}
Run Code Online (Sandbox Code Playgroud)


Bah*_*mir 21

这个问题已经回答,但是在退出活动时放置动画的最有效方法是覆盖相关活动的"finish()"方法:

@Override
public void finish() {
    super.finish();
    overridePendingTransition(R.anim.hold, R.anim.slide_out_bottom);
}
Run Code Online (Sandbox Code Playgroud)


Dei*_*man 19

我使用这种方法解决了这个问题:

用动画打开:

 Intent newUser = new Intent(getBaseContext(), NewUserActivity.class);
    startActivity(newUser);
    overridePendingTransition(R.anim.slide_in_right,R.anim.slide_out_left);
Run Code Online (Sandbox Code Playgroud)

要关闭动画:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    onBackPressed();
    return super.onOptionsItemSelected(item);
}

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


Fel*_*ipe 18

finish();
overridePendingTransition(0, 0);
Run Code Online (Sandbox Code Playgroud)


Nat*_*ann 12

考虑通过主题来做到这一点.您可以为活动或整个应用程序定义输入退出动画

  • 你能给我一个提示,看看主题将由哪些过渡组成.我也想设置一个自定义过渡到所有网站,但我不知道如何. (3认同)

lar*_*am1 6

继@schwiz的答案之后,这里是内置Dialog主题的动画覆盖,我在其中定义了本地slide_up和slide_down动画.我的活动指定主题MyDialog,以便进出这些过渡.

<style name="Animation.MyDialog" parent="android:Animation.Dialog">
    <item name="android:windowEnterAnimation">@anim/slide_up</item>
    <item name="android:windowExitAnimation">@anim/slide_down</item>
</style>

<style name="Theme.MyDialog" parent="android:Theme.Dialog">
    <item name="android:windowAnimationStyle">@style/Animation.MyDialog</item>
</style>
Run Code Online (Sandbox Code Playgroud)


Chr*_*Zou 5

使用startActivityForResult启动子活动,并在父活动的onActivityResult()中启动:

    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode==REQUEST_YOUR_ACTIVITY) {
        overridePendingTransition(R.anim.parent_appearing_anim, R.anim.child_dissmissing_anim);
    }
    super.onActivityResult(requestCode, resultCode, arg2);
}
Run Code Online (Sandbox Code Playgroud)