Android 滑动层活动动画

Android 滑动层活动动画,android,animation,material-design,Android,Animation,Material Design,我想实现活动转换的滑动层动画,如材质设计指南中所述 然而,我现在所能做的只是简单地将“滑入”和“保持”动画结合起来,这并没有给我一种堆叠层的效果。我怎样才能做到呢 我当前的实现: startActivity(intent); slideInTransition(); @Override public void onBackPressed() { super.onBackPressed(); slideOutTransition(); } 活动开始时: 活动结束时: 在\u

我想实现活动转换的滑动层动画,如材质设计指南中所述

然而,我现在所能做的只是简单地将“滑入”和“保持”动画结合起来,这并没有给我一种堆叠层的效果。我怎样才能做到呢

我当前的实现:

startActivity(intent);
slideInTransition();
@Override
public void onBackPressed() {
    super.onBackPressed();
    slideOutTransition();
}
活动开始时:

活动结束时:

在\u right.xml中滑动\u:


滑出\u right.xml:


stay.xml:


我终于找到了这个问题的解决方案。它工作得完美无缺

本答案中使用的重要组成部分:

  • 背景活动=背景活动
  • FrontActivity=在前面滑动的活动
  • BackgroundView=FrontActivity中的基本视图组
解决方案是在关闭FrontActivity之前设置FrontActivity布局的动画只有当您使用集成在布局中的工具栏作为操作栏时,这才可能

我将在这里复制我的代码。我的动画是一个从底部向前滑动的活动,并且在上一个活动之前再次滑向底部。只需更改动画,就可以在任何方向轻松获得此效果


1)将正面活动滑入背面活动
从BackActivity启动FrontActivity时,只需调用
overridePendingTransition

Intent intent = new Intent(activity, FrontActivity.class);
startActivity(intent);
overridePendingTransition(R.anim.slide_in_bottom, 0);
在\u bottom.xml中滑动\u

滑出\u bottom.xml

front_activity.xml


就这样。动画现在应该可以工作了


编辑

我找到了一个不会闪烁的解决方案。动画看起来完美无缺


关闭FrontActivity时,调用
finish
,而不是
NavUtils.navigateUpFromSameTask(活动)
。我在回答中改变了这一点。

您只需覆盖活动之间的转换即可获得所描述的行为。 我还包括背部活动的褪色收缩效果,以改善其外观:

右.xml中的幻灯片

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="100%p" android:toXDelta="0"
        android:duration="@android:integer/config_shortAnimTime"/>
</set>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="0" android:toXDelta="100%p"
        android:duration="@android:integer/config_shortAnimTime"/>
</set>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale android:duration="@android:integer/config_shortAnimTime"
        android:pivotX="50.0%"
        android:pivotY="50.0%"
        android:fromXScale="1.0"
        android:toXScale="0.9"
        android:fromYScale="1.0"
        android:toYScale="0.9"/>
    <alpha android:duration="@android:integer/config_shortAnimTime"
        android:fromAlpha="1.0"
        android:toAlpha="0.7"/>
</set>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale android:duration="@android:integer/config_shortAnimTime"
        android:pivotX="50.0%"
        android:pivotY="50.0%"
        android:fromXScale="0.9"
        android:toXScale="1.0"
        android:fromYScale="0.9"
        android:toYScale="1.0"/>
    <alpha android:duration="@android:integer/config_shortAnimTime"
        android:fromAlpha="0.7"
        android:toAlpha="1.0"/>
</set>
然后在活动开始时:

startActivity(intent);
slideInTransition();
@Override
public void onBackPressed() {
    super.onBackPressed();
    slideOutTransition();
}
对于后过渡:

startActivity(intent);
slideInTransition();
@Override
public void onBackPressed() {
    super.onBackPressed();
    slideOutTransition();
}

这个实现的问题在哪里?@gauravsapiens你找到答案了吗?太棒了!!很管用。。不要忘记删除
super.onBackPress()从后退键事件。这对我来说是个阻碍。你知道如何为
FrontActivity
制作阴影吗?
android:background="@android:color/background_light"
android:background="@android:color/background_dark"
<?xml version="1.0" encoding="utf-8"?>

<!-- This is BackgroundView and can be any ViewGroup -->
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:background="@android:color/background_light" >

    <android.support.v7.widget.Toolbar
        android:layout_height="@dimen/height_toolbar"
        android:layout_width="match_parent"
        android:minHeight="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

    <!-- rest of layout -->

</FrameLayout>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="100%p" android:toXDelta="0"
        android:duration="@android:integer/config_shortAnimTime"/>
</set>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="0" android:toXDelta="100%p"
        android:duration="@android:integer/config_shortAnimTime"/>
</set>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale android:duration="@android:integer/config_shortAnimTime"
        android:pivotX="50.0%"
        android:pivotY="50.0%"
        android:fromXScale="1.0"
        android:toXScale="0.9"
        android:fromYScale="1.0"
        android:toYScale="0.9"/>
    <alpha android:duration="@android:integer/config_shortAnimTime"
        android:fromAlpha="1.0"
        android:toAlpha="0.7"/>
</set>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale android:duration="@android:integer/config_shortAnimTime"
        android:pivotX="50.0%"
        android:pivotY="50.0%"
        android:fromXScale="0.9"
        android:toXScale="1.0"
        android:fromYScale="0.9"
        android:toYScale="1.0"/>
    <alpha android:duration="@android:integer/config_shortAnimTime"
        android:fromAlpha="0.7"
        android:toAlpha="1.0"/>
</set>
/* Activity transitions */

protected void slideInTransition() {
    overridePendingTransition(R.anim.slide_in_right, R.anim.fade_back);
}

protected void slideOutTransition() {
    overridePendingTransition(R.anim.fade_forward, R.anim.slide_out_right);
}
startActivity(intent);
slideInTransition();
@Override
public void onBackPressed() {
    super.onBackPressed();
    slideOutTransition();
}