`

activity切换动画

 
阅读更多

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 设定activity的进入和退出效果

看了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设定。

 

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics