android onBackPressed()动画问题

ac1kyiln  于 2023-02-02  发布在  Android
关注(0)|答案(4)|浏览(134)

我尝试重写onBackPressed()方法来设置我自己的动画,但实际上它从我的Activity滑动到同一个Activity,然后显示新Activity。
下面是我的代码:

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

下面是动画:
向右滑出:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate android:duration="400" android:fromXDelta="0%" android:toXDelta="100%" />
<alpha android:duration="400" android:fromAlpha="1.0" android:toAlpha="0.0" />
</set>

滑入左侧:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator= "false" >
<translate android:duration = "400" android:fromXDelta = "-100%" android:toXDelta = "0%" />
<alpha android:duration = "400" android:fromAlpha = "0.0" android:toAlpha = "1.0" />
</set>

谢谢你们的帮助。

brqmpdu1

brqmpdu11#

super.onBackPressed();删除此行然后工作
这是翻译从左侧滑入

<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
    android:duration="500"
    android:fromXDelta="-300%"
    android:fromYDelta="0%"
    android:toXDelta="0%"
    android:toYDelta="0%" />
  </set>

从右侧滑入

<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
    android:duration="500"
    android:fromXDelta="300%"
    android:fromYDelta="0%"
    android:toXDelta="0%"
    android:toYDelta="0%" />
  </set>

向左滑出

<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
    android:duration="500"
    android:fromXDelta="0%"
    android:fromYDelta="0%"
    android:toXDelta="-300%"
    android:toYDelta="0%" />
  </set>

向右滑出

<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
    android:duration="500"
    android:fromXDelta="0%"
    android:fromYDelta="0%"
    android:toXDelta="300%"
    android:toYDelta="0%" />
  </set>

/

@Override
public void onBackPressed()
{

    overridePendingTransition(R.anim.slide_out_right, R.anim.slide_in_left);
   // add which work after you back.
}

并添加您在按下返回时正在使用的功能。

jhiyze9q

jhiyze9q2#

尝试这一次,如果这对你来说很好,那么你可能会有一些其他部分的问题

向下滑动.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:fromYDelta="0%p"
    android:toYDelta="100%p" />

向上滑动对话框.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:fromYDelta="100%p"
    android:toYDelta="0%p" />

并在活动中添加以下内容

@Override
    public void onBackPressed() {
        finish();
        overridePendingTransition(R.anim.slide_up_dialog, R.anim.slide_out_down);
    }
nimxete2

nimxete23#

编辑:以下是来自Android Developers Blog - Back and other hard keys: three stories的答案
如果您要调查Android平台中的基础应用程序,您会注意到一个相当常见的模式:添加一点魔法来拦截BACK键并做一些不同的事情。要正确地做到这一点,魔法需要看起来像这样:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
        // do something on back.
        return true;
    }

    return super.onKeyDown(keyCode, event);
}

如何拦截Activity中的BACK键也是我们看到开发人员问的常见问题之一,因此从2.0开始,我们有了一个新的小API,使其更简单,更容易发现和正确处理:

@Override
public void onBackPressed() {
// do something on back.
return;
}

如果这就是您所关心的,并且您不担心支持2.0之前的平台版本,那么您可以到此为止,否则,请继续阅读。
因此,您的代码应该如下所示

@Override
public void onBackPressed()
{

   overridePendingTransition(R.anim.slide_out_right, R.anim.slide_in_left);
   finish();
}

以及

@Override
    public boolean onKeyDown(int keyCode, KeyEvent event)  {
        if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
            overridePendingTransition(R.anim.slide_out_right, R.anim.slide_in_left);
            finish();
            return true;
        }

        return super.onKeyDown(keyCode, event);
    }
xriantvc

xriantvc4#

下面是你可以尝试解决它:

@Override
public void onBackPressed()
{
    finish();
    overridePendingTransition(R.anim.slide_out_right, R.anim.slide_in_left);

}

相关问题