Activity的进入和退出动画的实现
(1).在style.xml中配置Activity的动画
<!--actvity进出动画-->
<style name="ActivityOutInAnimation">
<!--新Activity进入动画-->
<item name="android:activityOpenEnterAnimation">@anim/enter</item>
<!--旧Activity退出动画-->
<item name="android:activityOpenExitAnimation">@anim/exit</item>
<!--旧Activity进入动画-->
<item name="android:activityCloseEnterAnimation">@anim/enter</item>
<!--新Activity退出动画-->
<item name="android:activityCloseExitAnimation">@anim/exit</item>
</style>
(2).为Activiy设置Theme
<style name="DialogActivityStyle" parent="@android:style/Theme.Dialog">
<item name="android:windowAnimationStyle">@style/ActivityOutInAnimation</item>
</style>
(3).在minfast.xml中为需要的activity设置Theme
<activity
android:name=".act.FunctionsActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@style/DialogActivityStyle" />
配置好后我发现在模拟器上运行 的没有问题,但是在某些手机上运行却失效了
无奈之下只好动态去设置Activity的动画效果
overridePendingTransition(int enterAnim, int exitAnim) 通过这个方法来设置Activity的进出动画
int enterAnim 进入动画 int exitAnim 退出动画 注意此方法在 startActivity()和 finish()之后调用 进入:退出:Intent intent = new Intent(context,TestActivity.class); startActivity(intent); overridePendingTransition(R.anim.enter, R.anim.exit);
由于项目需求,我的Activity是在Service中启动的,在设置进入动画的时候,service中无法调用overridePendingTranstion(),这就无奈了....@Override public void finish() { super.finish(); overridePendingTransition(R.anim.enter,R.anim.exit); }
幸好巨人的肩膀已为我搭好... 在要启动的onCreate()方法中调用overridePendingTranstion()方法圆满收官!@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE);//去标题 overridePendingTransition(R.anim.enter, R.anim.exit); setContentView(R.layout.activity_functions); }
最后如果应用中大多数的Activity都要使用自定义进出动画的话,可以写个基类继承Activity,重写启动和关闭Activity的方法,在其中
调用overridePandingTranstion()public class BaseActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } /*重写startActivity()*/ @Override public void startActivity(Intent intent) { super.startActivity(intent); overridePendingTransition(R.anim.enter , R.anim.exit); } /*重写finish()*/ @Override public void finish() { super.finish(); overridePendingTransition(R.anim.enter , R.anim.exit); } }