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中的基本视图组
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();
}