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设定。
本文详细介绍了如何使用主题方式在Android中实现Activity的动画切换及显示效果,以微信点击图片放大缩小为例,展示了如何自定义样式并应用于Activity中,包括设置进入和退出动画、主题风格等,提供了具体的XML配置代码示例。
7868

被折叠的 条评论
为什么被折叠?



