activity切换可以使用代码:
overridePendingTransition(enterAnim, exitAnim);
今天讲的主要是使用theme方式来做(我这里以像微信点击图片放大,再点击图片缩小退出动画为例):
样式文件里增加自定义样式styles.xml
<!-- 查看大图的Activity效果 --> <style name="My.Animation.Activity.Translucent.Style" parent="@android:style/Animation.Translucent"> <item name="android:activityOpenEnterAnimation">@anim/head_in</item> <item name="android:activityOpenExitAnimation">@anim/head_out</item> <item name="android:activityCloseEnterAnimation">@anim/head_in</item> <item name="android:activityCloseExitAnimation">@anim/head_out</item> <item name="android:windowEnterAnimation">@anim/head_in</item> <item name="android:windowExitAnimation">@anim/head_out</item> </style> <!-- 显示大图片 android:Theme.Translucent.NoTitleBar--> <style name="ImageScale" parent="@android:style/Theme.Light"> <item name="android:windowAnimationStyle">@style/My.Animation.Activity.Translucent.Style</item> <!-- 无标题 --> <item name="android:windowNoTitle">true</item> <!-- 设置全屏显示 --> <item name="android:windowFullscreen">false</item> <!-- 边框 --> <item name="android:windowFrame">@null</item> <!-- 是否浮现在activity之上 --> <item name="android:windowIsFloating">false</item> <!-- 透明 --> <item name="android:windowIsTranslucent">true</item> <item name="android:windowBackground">@color/transparent</item> <!-- 模糊 --> <item name="android:backgroundDimEnabled">true</item> </style>
使用时简单,AndroidManifest.xml直接设置theme:
<activity android:name="com.yiduoyun.tiku.activity.ViewImageActivity" android:configChanges="orientation|keyboardHidden|navigation" android:theme="@style/ImageScale" android:launchMode="singleTask" android:screenOrientation="portrait" />
这里要注意的是自定义样式My.Animation.Activity.Translucent.Style继承了android:style/Animation.Translucent,在android:style/Animation.Translucent里面有定义动画样式:
<style name="Animation.Translucent"> <item name="windowEnterAnimation">@anim/translucent_enter</item> <item name="windowExitAnimation">@anim/translucent_exit</item> </style>
故得重写它,才不会受它影响:
<item name="android:windowEnterAnimation">@anim/head_in</item> <item name="android:windowExitAnimation">@anim/head_out</item>
一般activity动画切换只要重写如下样式即可:
<item name="android:activityOpenEnterAnimation">@anim/head_in</item> <item name="android:activityOpenExitAnimation">@anim/head_out</item> <item name="android:activityCloseEnterAnimation">@anim/head_in</item> <item name="android:activityCloseExitAnimation">@anim/head_out</item>
另转:
看了android的源代码和资源文件,终于明白如何去修改设置Dialog和Activity的进入和退出效果了。设置Dialog首先通过getWindow()方法获取它的窗口,然后通过getAttributes()方法获得window的WindowManager.LayoutParams lp, lp有个公共属性windowAnimations, 只要把要实现的animation的id赋值给它就可以了。问题是这个animation应该怎么写呢,研究发现,窗口进入和退出的效果分别是通过@android:windowEnterAnimation和@android:windowExitAnimation两个item设定的,比如进入时的anim是@anim/dialog_enter, 退出的是@anim/dialog_exit, 则声明一个style为:
<style name="mydialog">
<item name="@android:windowEnterAnimation">@anim/dialog_enter</item>
<item name="@android:windowExitAnimation">@anim/dialog_exit</item>
</style>
然后把这个style的id传给lp.windowAnimations就行了。
Activity的进入和退出效果可以通过
@android:activityOpenEnterAnimation,
@android:activityOpenExitAnimation,
@android:activityCloseEnterAnimation,
@android:activityCloseExitAnimation
这几个item设定:
第一个表示新的activity创建进入效果,
第2个表示activity还没有finish()下退出效果,
第3个表示上一个activity返回进入效果,
第4个表示的是activity finish()之后退出效果...(好似有点乱了)。具体设置参考如下:
<style name="myact">
<item name="@android:activityOpenEnterAnimation">@anim/act_enter</item>
<item name="@android:activityOpenExitAnimation">@anim/act_exit</item>
<item name="@android:activityCloseEnterAnimation">@anim/act_enter</item>
<item name="@android:activityCloseExitAnimation">@anim/act_exit</item>
</style>
<style name="mytheme" parent="@android:style/Theme">
<item name="@android:windowAnimationStyle">@style/myact</item>
</style>
然后把mytheme这个style作为Activity的theme就行了,还有一个办法就是通过Acitvity获取它的window, 然后和设置dialog一样进行设置,因为归根到底是设置Window的layoutparams里的windowAnimations值。所以Activity的进入和退出效果也可以通过@android:windowEnterAnimation和@android:windowExitAnimation这两个item设定。