(开启新界面用到的两个动画文件) create_zoomin.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:Android="http://schemas.android.com/apk/res/android" Android:interpolator="@android:anim/decelerate_interpolator"> <scale Android:duration="@android:integer/config_mediumAnimTime Android:fromXScale=".8" Android:fromYScale=".8" Android:pivotX="50%p" Android:pivotY="50%p" Android:toXScale="1.0" Android:toYScale="1.0" /> </set> 123456789101112create_zoomout.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:Android="http://schemas.android.com/apk/res/android" Android:interpolator="@android:anim/decelerate_interpolator" Android:zAdjustment="top"> <scale Android:duration="@android:integer/config_mediumAnimTime" Android:fromXScale="1.0" Android:fromYScale="1.0" Android:pivotX="50%p" Android:pivotY="50%p" Android:toXScale="2" Android:toYScale="2" /> <alpha Android:duration="@android:integer/config_mediumAnimTime" Android:fromAlpha="0.5" Android:toAlpha="0" /> </set> 1234567891011121314151617(页面结束返回到上一页用到的两个动画文件)
finish_zoomin.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:Android="http://schemas.android.com/apk/res/android" Android:interpolator="@android:anim/decelerate_interpolator"> <scale Android:duration="@android:integer/config_mediumAnimTime" Android:fromXScale="2.0" Android:fromYScale="2.0" Android:pivotX="50%p" Android:pivotY="50%p" Android:toXScale="1.0" Android:toYScale="1.0" /> </set> 123456789101112finish_zoomout.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:Android="http://schemas.android.com/apk/res/android" Android:interpolator="@android:anim/decelerate_interpolator" Android:zAdjustment="top"> <scale Android:duration="@android:integer/config_mediumAnimTime" Android:fromXScale="1.0" Android:fromYScale="1.0" Android:pivotX="50%p" Android:pivotY="50%p" Android:toXScale=".5" Android:toYScale=".5" /> <alpha Android:duration="@android:integer/config_mediumAnimTime" Android:fromAlpha="1.0" Android:toAlpha="0" /> </set> 123456789101112131415161718BaseActivity.java
public class BaseActivity extends AppCompatActivity { /** * 打开activity */ protected void openActivity(Class<?> cls) { openActivity(this, cls); overridePendingTransition(R.anim.create_zoomin, R.anim.create_zoomout); } /** * 打开activity */ public static void openActivity(Context context, Class<?> cls) { Intent intent = new Intent(context, cls); context.startActivity(intent); } @Override public void finish() { super.finish(); overridePendingTransition(R.anim.finish_zoomin, R.anim.finish_zoomout); } } 123456789101112131415161718192021222324例如:
public class MainActivity extends BaseActivity { } 12例如:
openActivity(SeccondActivity.class); 11.在res/values/styles.xml文件配置动画,如下:
<!-- 默认Activity跳转动画 --> <style name="default_animation" mce_bogus="1" parent="@android:style/Animation.Activity"> <item name="android:activityOpenEnterAnimation">@anim/create_zoomin</item> <item name="android:activityOpenExitAnimation">@anim/create_zoomout</item> <item name="android:activityCloseEnterAnimation">@anim/finish_zoomin</item> <item name="android:activityCloseExitAnimation">@anim/finish_zoomout</item> </style> 12345672.在AppTheme中引用动画
<style name="AppTheme.NoActionBar"> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> <item name="android:windowAnimationStyle">@style/default_animation</item> </style> 123453.在AndroidManifest.xml中给Activity使用该主题,如下:
<activity android:name=".SeccondActivity" android:label="@string/title_activity_seccond" android:theme="@style/AppTheme.NoActionBar" > </activity> 123454.注意:style的某些属性可能使配置的动画失效无法执行,如:
<item name="android:windowIsTranslucent">true</item> 1另外Activity的启动模式设置也可能导致配置的动画无法运行:
android:launchMode="singleInstance" 12不同的ROM也可能会引起设置失效,为了保证所有平台的完美运行,可能需要获取设置的属性,在程序的oncreate方法和finish方法中进行手动调用。
步骤和上面类似,只是把第1步改为:
<!-- 默认Activity跳转动画 --> <style name="default_animation" mce_bogus="1" parent="@android:style/Animation.Activity"> <item name="android:windowEnterAnimation">@anim/create_zoomin</item> <item name="android:windowExitAnimation">@anim/create_zoomout</item> </style> 12345该方法比较靠谱,但是如果安卓系统中定制了默认界面切换动画,两个动画会叠加执行。
