Activity切换动画
当前可以通过activity.overridePendingTransition()设置
通过样式设置在android:theme="@style/AppTheme"
中配置
<item name="android:windowAnimationStyle">@style/myWindowAnim</item>
在使用中的问题
<style name="myWindowAnim" parent="@android:style/Animation.Activity">
<!-- 和overridePendingTransition同时起作用-->
<item name="android:windowEnterAnimation">@anim/slide_right_in</item>
<item name="android:windowExitAnimation">@anim/slide_right_out</item>
<!--设置windowIsTranslucent=true 以下则没效果-->
<!--启动新界面 新启动的界面 当面界面关闭-->
<item name="android:activityOpenEnterAnimation">@anim/slide_left_in</item>
<item name="android:activityOpenExitAnimation">@anim/slide_right_out</item>
<!--退出界面 退出老界面进入 当前界面关闭-->
<item name="android:activityCloseEnterAnimation">@anim/slide_right_in</item>
<item name="android:activityCloseExitAnimation">@anim/slide_left_out</item>
<!--<item name="android:activityOpenEnterAnimation">@anim/activity_out</item>
<item name="android:activityOpenExitAnimation">@anim/activity_in</item>-->
</style>
查看Animation.Activity源码
<style name="Animation.Activity">
<item name="activityOpenEnterAnimation">@anim/activity_open_enter</item>
<item name="activityOpenExitAnimation">@anim/activity_open_exit</item>
<item name="activityCloseEnterAnimation">@anim/activity_close_enter</item>
<item name="activityCloseExitAnimation">@anim/activity_close_exit</item>
<item name="taskOpenEnterAnimation">@anim/task_open_enter</item>
<item name="taskOpenExitAnimation">@anim/task_open_exit</item>
<item name="launchTaskBehindTargetAnimation">@anim/launch_task_behind_target</item>
<item name="launchTaskBehindSourceAnimation">@anim/launch_task_behind_source</item>
<item name="taskCloseEnterAnimation">@anim/task_close_enter</item>
<item name="taskCloseExitAnimation">@anim/task_close_exit</item>
<item name="taskToFrontEnterAnimation">@anim/task_open_enter</item>
<item name="taskToFrontExitAnimation">@anim/task_open_exit</item>
<item name="taskToBackEnterAnimation">@anim/task_close_enter</item>
<item name="taskToBackExitAnimation">@anim/task_close_exit</item>
<item name="wallpaperOpenEnterAnimation">@anim/wallpaper_open_enter</item>
<item name="wallpaperOpenExitAnimation">@anim/wallpaper_open_exit</item>
<item name="wallpaperCloseEnterAnimation">@anim/wallpaper_close_enter</item>
<item name="wallpaperCloseExitAnimation">@anim/wallpaper_close_exit</item>
<item name="wallpaperIntraOpenEnterAnimation">@anim/wallpaper_intra_open_enter</item>
<item name="wallpaperIntraOpenExitAnimation">@anim/wallpaper_intra_open_exit</item>
<item name="wallpaperIntraCloseEnterAnimation">@anim/wallpaper_intra_close_enter</item>
<item name="wallpaperIntraCloseExitAnimation">@anim/wallpaper_intra_close_exit</item>
<item name="fragmentOpenEnterAnimation">@animator/fragment_open_enter</item>
<item name="fragmentOpenExitAnimation">@animator/fragment_open_exit</item>
<item name="fragmentCloseEnterAnimation">@animator/fragment_close_enter</item>
<item name="fragmentCloseExitAnimation">@animator/fragment_close_exit</item>
<item name="fragmentFadeEnterAnimation">@animator/fragment_fade_enter</item>
<item name="fragmentFadeExitAnimation">@animator/fragment_fade_exit</item>
</style>
对话框弹出动画
new Dialog(context, R.style.MyDialog);
第二个参数样式中添加
<item name="android:windowAnimationStyle">@style/dialogWindowAnim</item>
view.addView() removeView() setVisibility()动画
view的父容器设置vg.setLayoutTransition(mlayoutTransition);
// 生成自定义动画
private LayoutTransition setupCustomAnimations() {
LayoutTransition mTransition = new LayoutTransition();
ObjectAnimator animIn = (ObjectAnimator) AnimatorInflater.loadAnimator(getActivity(), R.animator.slide_left_in);
mTransition.setAnimator(LayoutTransition.APPEARING, animIn);
ObjectAnimator animOut = (ObjectAnimator) AnimatorInflater.loadAnimator(getActivity(), R.animator.slide_left_out);
mTransition.setAnimator(LayoutTransition.DISAPPEARING, animOut);
return mTransition;
}
CHANGE_APPEARING CHANGE_DISAPPEARING 的实现可参考LayoutTransition的源码实现较复杂,
如若不设置left top right bottom 则受影响的消失的会与消失的重叠
setAnimator()的第1个参数设置的值
1、APPEARING - A flag indicating the animation that runs on items that are appearing in the container.
2、CHANGE_APPEARING - A flag indicating the animation that runs on items that are changing due to a new item appearing in the container.
3、DISAPPEARING - A flag indicating the animation that runs on items that are disappearing from the container.
4、CHANGE_DISAPPEARING - A flag indicating the animation that runs on items that are changing due to an item disappearing from the container.
mTransition.setduration()
Gone 时,不可见的view 使用DISAPPEARING动画,受影响的使用CHANGE_DISAPPEARING动画
其它
res/animator/slide_left_in.xml
<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="30000"
android:propertyName="rotationX"
android:valueFrom="90"
android:valueTo="0"
android:valueType="floatType" />
属性动其他定义示例
动画同时执行
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator
android:interpolator="@android:interpolator/decelerate_quint"
android:valueFrom="0dp" android:valueTo="-100dp"
android:valueType="floatType"
android:propertyName="translationX"
android:duration="@android:integer/config_mediumAnimTime" />
<objectAnimator
android:interpolator="@android:interpolator/decelerate_quint"
android:valueFrom="1.0" android:valueTo="0.0"
android:valueType="floatType"
android:propertyName="alpha"
android:duration="@android:integer/config_mediumAnimTime" />
</set>
view.setVisibility()动画
android:animateLayoutChanges="true"