(开启新界面用到的两个动画文件)
create_zoomin.xml
<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>
create_zoomout.xml
"1.0" encoding="utf-8"?>
xmlns:Android="http://schemas.android.com/apk/res/android"
Android:interpolator="@android:anim/decelerate_interpolator"
Android:zAdjustment="top">
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" />
Android:duration="@android:integer/config_mediumAnimTime"
Android:fromAlpha="0.5"
Android:toAlpha="0" />
</set>
(页面结束返回到上一页用到的两个动画文件)
finish_zoomin.xml
<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>
finish_zoomout.xml
"1.0" encoding="utf-8"?>
xmlns:Android="http://schemas.android.com/apk/res/android"
Android:interpolator="@android:anim/decelerate_interpolator"
Android:zAdjustment="top">
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" />
Android:duration="@android:integer/config_mediumAnimTime"
Android:fromAlpha="1.0"
Android:toAlpha="0" />
</set>
BaseActivity.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);
}
}
例如:
public class MainActivity extends BaseActivity {
}
例如:
openActivity(SeccondActivity.class);
1.在res/values/styles.xml文件配置动画,如下:
<style name="default_animation" mce_bogus="1" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/create_zoomin
- "android:activityOpenExitAnimation"
>@anim/create_zoomout
- "android:activityCloseEnterAnimation"
>@anim/finish_zoomin
- "android:activityCloseExitAnimation">@anim/finish_zoomout
style>
2.在AppTheme中引用动画
3.在AndroidManifest.xml中给Activity使用该主题,如下:
<activity
android:name=".SeccondActivity"
android:label="@string/title_activity_seccond"
android:theme="@style/AppTheme.NoActionBar" >
activity>
4.注意:style的某些属性可能使配置的动画失效无法执行,如:
<item name="android:windowIsTranslucent">trueitem>
另外Activity的启动模式设置也可能导致配置的动画无法运行:
android:launchMode="singleInstance"
不同的ROM也可能会引起设置失效,为了保证所有平台的完美运行,可能需要获取设置的属性,在程序的oncreate方法和finish方法中进行手动调用。
步骤和上面类似,只是把第1步改为:
<style name="default_animation" mce_bogus="1" parent="@android:style/Animation.Activity">
<item name="android:windowEnterAnimation">@anim/create_zoomin
- "android:windowExitAnimation"
>@anim/create_zoomout
style>
该方法比较靠谱,但是如果安卓系统中定制了默认界面切换动画,两个动画会叠加执行。