【问题标题】:slide out animation not working on back press button?滑出动画在后按按钮上不起作用?
【发布时间】:2019-06-26 22:02:05
【问题描述】:

我在进入或退出活动时使用动画,进入活动动画效果很好,但退出动画效果不佳。当我按下后退按钮时,我开始退出动画。发生的情况是它首先开始为当前活动输入动画,然后显示最后一个活动我想要一个简单的退出动画在按下后退按钮时。

Slide_out.xml

    <?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime"
    android:fromXDelta="0%p"
    android:toXDelta="-100%p" >

</translate>

Slide_in.xml

    <?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime"
    android:fromXDelta="100%p"
    android:toXDelta="0%p" >

</translate>

按下操作栏后退按钮

public boolean onOptionsItemSelected(MenuItem item) {
    // TODO Auto-generated method stub
    switch (item.getItemId()) {
    case R.id.home:

        finish();
        overridePendingTransition(R.anim.slide_out, R.anim.slide_in);
        return true;


    default:
        break;
    }

    return super.onOptionsItemSelected(item);

}

【问题讨论】:

  • 假设您现在有一个 ActivityA,您希望 ActivityB 从哪里来,以及 ActivityB 将如何退出。请解释一下,以便我可以提供帮助
  • 我想从 B 开始,进入动画。我能够做到。但我想从 B 转到上一个活动(A),退出动画就像从左到右一样。我该怎么做?
  • 所以您需要 ActivityB 从左侧滑到您的 ActivityA 上,在 Back 按下时您希望 ActivityB 滑到右侧,因为您的 ActivityA 将保持原样?
  • 是的,这就是我想要的
  • 然后看看我的回答

标签: android animation android-activity android-animation


【解决方案1】:

首先在你的 anim 文件夹中再创建一个动画,即 nothing.xml

nothing.xml

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime"
    android:fromXDelta="0%"
    android:toXDelta="0%" >

</translate>

这是您的 slide_in.xml

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime"
    android:fromXDelta="-100%"
    android:toXDelta="0%" >

</translate>

slide_out.xml

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime"
    android:fromXDelta="0%"
    android:toXDelta="100%" >

</translate>

现在像这样调用你的 NewActivity

startActivity(new Intent(CurrentActivity.this, NewActivity.class));
overridePendingTransition(R.anim.slide_in, R.anim.nothing);

然后在您的后退按钮上单击执行此操作

finish();
overridePendingTransition(R.anim.nothing, R.anim.slide_out);

【讨论】:

  • 如何移动进来的A活动。当B退出时
  • 但您说您希望 ActivityA 保持原样??
  • 抱歉,我的需求有所变化。
  • 大声笑只需按下后退按钮将 R.anim.nothing 更改为 R.anim.slide_in
  • 请将我更新的代码标记为正确答案,以便它可以帮助其他人。感谢您的时间和帮助。
【解决方案2】:

我用过 slide_in.xml

    <?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime"
    android:fromXDelta="100%"
    android:toXDelta="0%" >

</translate>

slide_out.xml

    <?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime"
    android:fromXDelta="0%"
    android:toXDelta="-100%" >

</translate>

slide_enter.xml

  <?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime"
    android:fromXDelta="-100%"
    android:toXDelta="0%" >

</translate>

slide_exit.xml

    <?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime"
    android:fromXDelta="0%"
    android:toXDelta="100%" >

</translate>

代码

        Intent i=new Intent(Authentication.this,Login.class);
        startActivity(i);
        overridePendingTransition(R.anim.slide_in, R.anim.slide_out);

到上一个

         finish();
         overridePendingTransition(R.anim.slide_enter, R.anim.slide_exit);

【讨论】:

  • 复制回答您自己问题的人的答案是荒谬的。我什至不知道你是怎么得到这么多赞的。
  • 这个答案是正确的。但slide_out.xml 似乎无关紧要。使用android:fromXDelta="0%" android:toXDelta="0%" 也没有任何明显的区别。
【解决方案3】:

onBackPressed中添加动画,点击返回按钮时会显示动画。

@Override
public void onBackPressed() {
    super.onBackPressed();
    overridePendingTransition(R.anim.slide_in, R.anim.slide_out);   
}

【讨论】:

  • 我正在使用操作栏上的后退按钮。我已经展示了代码
  • 哎呀,对不起。用意图调用它来替换完成怎么样。像这样。 Intent intent = new Intent(this, PreviousActivity.class);意图.addFlags(意图.FLAG_ACTIVITY_CLEAR_TOP);开始活动(意图);
  • 但这会杀死我之前的活动,所有数据都会丢失。
  • K.老兄,你能检查一下这样的 onBackPressed() 函数调用吗?案例 R.id.home: onBackPressed();返回真;我不知道它是否会起作用。
  • 我想要的后面的活动应该从左边开始
【解决方案4】:

我通过覆盖后退按钮的行为解决了这个问题。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    finish();
    return true;
}

【讨论】:

    【解决方案5】:

    我做了类似的事情,它工作正常,你可以用 startAnimation(your_xml) 改变 animate(),你还必须使活动背景透明:

    <item name="android:windowBackground">@android:color/transparent</item>
    

    这个activity会向下滑动,由于背景透明,在滑动的那一刻MainActivity是可见的。 编辑 - 带有工具栏后退按钮:

    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
    
                mainlinear.animate()
                        .translationY(ScUtils.getScreenHeight(getApplicationContext()))
                        .setDuration(210)
                        .setInterpolator(new AccelerateInterpolator())
                        .setListener(new AnimatorListenerAdapter() {
                            @Override
                            public void onAnimationEnd(Animator animation) {
                                ThemeActivity.super.onBackPressed();
                                overridePendingTransition(0, 0);
                               }
                              }).start();
                            }
                        });
    

    【讨论】:

    • 我在这里使用了操作栏的后退按钮,所以请说明解决办法
    【解决方案6】:

    对于 Activity 输入动画,在 onCreate(...) 函数中使用 overridePendingTransition(R.anim.slide_out, R.anim.slide_in);

    对于退出动画,在onPause(...) 中进行相同的调用。

    【讨论】:

      【解决方案7】:

      我的操作栏上有一个返回/主页按钮,它没有通过覆盖 onBackPressedfinish 来拾取幻灯片动画。所以我不得不从here 添加这个sn-p。如果使用与上述相同的slide_enterslide_exit

      @Override
      public boolean onOptionsItemSelected(MenuItem item) {
          // Handle action bar item clicks here. The action bar will
          // automatically handle clicks on the Home/Up button, so long
          // as you specify a parent activity in AndroidManifest.xml.
          int id = item.getItemId();
      
          switch(id) {
              // back button
              case android.R.id.home:
                  finish();
                  overridePendingTransition(R.anim.slide_enter, R.anim.slide_exit);
                  return true;
          }
      
          return super.onOptionsItemSelected(item);
      }
      

      如果有人觉得它有用。

      【讨论】:

        猜你喜欢
        • 2012-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-21
        • 1970-01-01
        • 2014-03-05
        • 1970-01-01
        相关资源
        最近更新 更多