复杂动画设计-Android中的'动效'

1,801 阅读1分钟

复杂动画设计系列文章

复杂动画设计-Android动画分类介绍了android中最常见的动画场景,本文做为补充,对Android中的'动效'做进一步梳理.

1. 根据使用场景,Android中的'动效'

  1. View动画
  2. 帧动画
  3. 属性动画

2. View动画

  1. View动画使用场景在之前文章有介绍,这里详细介绍如何使用View动画设置'Activity的切换效果'
  2. 使用View动画设置'Activity的切换效果'有2种方式
    • 使用overridePendingTransition
    • 使用style
  3. 使用overridePendingTransition
    anim_activity_change_over_curr_enter:
    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <alpha
            android:duration="2000"
            android:fromAlpha="0.0"
            android:toAlpha="1.0" />
        <translate
            android:duration="2000"
            android:fromXDelta="0"
            android:fromYDelta="-100%"
            android:toXDelta="0"
            android:toYDelta="0" />
    </set>
    
    anim_activity_change_over_curr_exit:
    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <alpha
            android:duration="2000"
            android:fromAlpha="1.0"
            android:toAlpha="0.0" />
        <translate
            android:duration="2000"
            android:fromXDelta="0"
            android:fromYDelta="0"
            android:toXDelta="0"
            android:toYDelta="100%" />
    </set>
    
    jump(OverridePendingTransitionSecondActivity.class);
    overridePendingTransition(R.anim.anim_activity_change_over_curr_enter,R.anim.anim_activity_change_over_curr_exit);
    
  4. 使用style
    1. 首先在res/values/styles.xml中创建style,定义Activity切换时候对应的4个动画效果
      • activityOpenEnterAnimation 打开一个新的 Activity 时,要显示的新的 Activit 执行的动画
      • activityOpenExitAnimation 打开一个新的 Activity 时,当前的旧的 Activit 执行的动画
      • activityCloseEnterAnimation 关闭一个 activity 时,要显示的上一个 Activity 执行的动画
      • activityCloseExitAnimation 关闭一个 activity 时,被关闭的 Activity 执行的动画
      <style name="ActivityChangeAnim">
          <item name="android:activityOpenEnterAnimation">@anim/anim_activity_open_enter</item>
          <item name="android:activityOpenExitAnimation">@anim/anim_activity_open_exit</item>
          <item name="android:activityCloseEnterAnimation">@anim/anim_activity_close_enter</item>
          <item name="android:activityCloseExitAnimation">@anim/anim_activity_close_exit</item>
      </style>
      
      anim_activity_open_enter:
      <?xml version="1.0" encoding="utf-8"?>
      <set xmlns:android="http://schemas.android.com/apk/res/android">
          <alpha
              android:duration="2000"
              android:fromAlpha="0.0"
              android:toAlpha="1.0" />
          <translate
              android:duration="2000"
              android:fromXDelta="0"
              android:fromYDelta="-100%"
              android:toXDelta="0"
              android:toYDelta="0" />
      </set>
      
      anim_activity_open_exit:
      <?xml version="1.0" encoding="utf-8"?>
      <set xmlns:android="http://schemas.android.com/apk/res/android">
          <alpha
              android:duration="2000"
              android:fromAlpha="1.0"
              android:toAlpha="0.0" />
          <translate
              android:duration="2000"
              android:fromXDelta="0"
              android:fromYDelta="0"
              android:toXDelta="0"
              android:toYDelta="100%" />
      </set>
      
      anim_activity_close_enter:
      <?xml version="1.0" encoding="utf-8"?>
      <set xmlns:android="http://schemas.android.com/apk/res/android">
          <alpha
              android:duration="2000"
              android:fromAlpha="0.0"
              android:toAlpha="1.0" />
          <translate
              android:duration="2000"
              android:fromXDelta="-100%"
              android:fromYDelta="0"
              android:toXDelta="0"
              android:toYDelta="0" />
      </set>
      
      anim_activity_close_exit:
      <?xml version="1.0" encoding="utf-8"?>
      <set xmlns:android="http://schemas.android.com/apk/res/android">
          <alpha
              android:duration="2000"
              android:fromAlpha="0.0"
              android:toAlpha="1.0" />
          <translate
              android:duration="2000"
              android:fromXDelta="0"
              android:fromYDelta="0"
              android:toXDelta="100%"
              android:toYDelta="0" />
      </set>
      
    2. 在Application或Activity要使用的theme中,通过android:windowAnimationStyle引用刚刚创建的style
      <style name="StyleActivityChangeTheme" parent="Theme.AppCompat.Light.DarkActionBar">
          <item name="android:windowAnimationStyle">@style/ActivityChangeAnim</item>
      </style>
      
    3. 在AndroidManifest.xml中应用这个theme,可以只在特定的Activity引用.
      <activity
          android:name=".activity.animation.activitychange.UseStyleThemeSecondActivity"
          android:theme="@style/StyleActivityChangeTheme" />
      <activity
          android:name=".activity.animation.activitychange.UseStyleThemeFirstActivity"
          android:theme="@style/StyleActivityChangeTheme" />
      

3. 属性动画

N. 参考资料