【问题标题】:How can I add an animation to the activity finish()如何将动画添加到活动完成()
【发布时间】:2011-05-18 20:34:10
【问题描述】:

我在创建活动时使用 overridePendingTransition 并且效果很好我可以看到淡入效果很好,但是当我尝试为活动的完成设置动画时,它仍然在执行默认的从右到左滑动。

我首先尝试在启动 Activity 时定义 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);
    }

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

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);
            }
        }
    });

但是这些方法都不会阻止退出动画的“从右到左”滑动。关于我做错了什么有什么想法吗?

【问题讨论】:

    标签: android animation android-activity


    【解决方案1】:

    我在调用 finish() 之后覆盖挂起的转换;

    就我而言,我这样做是为了避免过渡。

    finish();
    Details.this.overridePendingTransition(R.anim.nothing,R.anim.nothing);
    

    顺序很重要:)

    【讨论】:

    • by "Details",@Goofyahead 正在命名他的封闭 Activity--ymmv。这种技术对我有用,可以在 2.x 上替换 Theme.Dialog 中的动画,但不是 3.x 或 4.x
    • R.anim.nothing 长什么样子?
    • 使用@Felipe Micaroni Lalli 回答,0 表示没有动画。
    • 这个赞对我也有帮助。它解释了如何定义自己的动画:stackoverflow.com/questions/5151591/…
    • 您可以覆盖 finish() 方法以避免在所有情况下转换(按下后退按钮,作为示例):@Override public void finish() { super.finish(); overridePendingTransition(0, 0); }
    【解决方案2】:

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

    @Override
    public void finish() {
        super.finish();
        overridePendingTransition(R.anim.hold, R.anim.slide_out_bottom);
    }
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 为什么这样更好?
      【解决方案4】:
      finish();
      overridePendingTransition(0, 0);
      

      【讨论】:

        【解决方案5】:

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

        用动画打开:

         Intent newUser = new Intent(getBaseContext(), NewUserActivity.class);
            startActivity(newUser);
            overridePendingTransition(R.anim.slide_in_right,R.anim.slide_out_left);
        

        以动画结束:

        @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);
        }
        

        【讨论】:

          【解决方案6】:

          考虑通过一个主题来实现它。您可以为活动或整个应用程序定义进入退出动画

          【讨论】:

          • 是的!就是这样。嗯,有点。我已经应用了一个主题,并且该主题定义了一个动画,所以这就是为什么我无法让我自己的动画工作。非常感谢您的洞察力!
          • 你能给我一个提示,在哪里可以看到主题将提供哪些转换。我也想为所有网站设置自定义过渡,但我不知道如何。
          • @Zapnologica 我为类似问题给出的另一个答案更清楚地说明了这一点。 stackoverflow.com/questions/4940574/…
          【解决方案7】:

          根据@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>
          

          【讨论】:

            【解决方案8】:

            使用 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);
            }
            

            【讨论】:

            猜你喜欢
            • 2018-11-06
            • 1970-01-01
            • 1970-01-01
            • 2016-07-12
            • 2011-12-15
            • 2013-06-22
            • 1970-01-01
            • 1970-01-01
            • 2015-04-16
            相关资源
            最近更新 更多