最近做项目,发现Activity界面切换跳转时,切换动画不一致,有的左进右退,有的右进左退,有的左进左退,有的右进右退,视觉交互效果不是很好,通过查资料,采用以下方法可以解决。
主要是通过AppTheme,直接在主题中修改activity动画样式,具体如下:
1.定义包含动画的Activity主题
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@android:color/transparent</item>
<item name="colorAccent">@color/Black</item>
<!-- 设置没有标题 -->
<item name="android:windowNoTitle">true</item>
<!-- 设置activity切换动画 -->
<item name="android:windowAnimationStyle">@style/activityAnimation</item>
</style>
2.定义切换动画style
<!-- animation 样式 -->
<style name="activityAnimation" parent="@android:style/Animation">
<item name="android:activityOpenEnterAnimation">@anim/right_in</item>
<item name="android:activityOpenExitAnimation">@anim/right_in</item>
<item name="android:activityCloseEnterAnimation">@anim/right_in</item>
<item name="android:activityCloseExitAnimation">@anim/right_in</item>
</style>
其中:
android:activityOpenEnterAnimation:要启动的Activity的入场动画
android:activityCloseExitAnimation:要结束的Activity的出场动画
android:activityOpenExitAnimation:当前Activity结束的动画
android:activityCloseEnterAnimation:栈顶Activity的入场动画
3.在res/anim中具体定义4个动画
right_in.xml:从屏幕右侧移动到屏幕中心
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="500"
android:fromXDelta="100.0%p"
android:toXDelta="0.0" />
</set>
right_out.xml:从屏幕中心移动到屏幕的右侧
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="500"
android:fromXDelta="0.0"
android:toXDelta="100.0%p" />
</set>
left_in.xml:从屏幕左侧移动到屏幕中心
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="500"
android:fromXDelta="-30.0%p"
android:toXDelta="0.0" />
</set>
left_out.xml:从屏幕中心移动到屏幕左侧
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="500"
android:fromXDelta="0.0"
android:toXDelta="-30.0%p" />
</set>
4.当通过以上方式设置完后,如果发现没有生效,有可能是AppTheme中配置了
<item name="windowIsTranslucente">true</item>
去掉该属性设置即可。