android 使用动画实例[1]

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的源码实现较复杂,

Paste_Image.png

如若不设置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"

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容