zoukankan      html  css  js  c++  java
  • Activity 设置切换动画

    extends://blog.csdn.net/luohaowang320/article/details/42124225 | http://blog.csdn.net/xuewater/article/details/36398803

    最近写项目的时候需要用到大量的activity切换动画,于是就用了考虑到了theme中引用style来实现,但是竟然无效,很是郁闷,几经波折,找到了原因,原来是style里面设置了android:windowIsTranslucent这个属性,代码如下:

    <style name="AppTranslateTheme" parent="AppBaseTheme">
    
            <!-- All customizations that are NOT specific to a particular API-level can go here. -->
            <item name="android:windowNoTitle">true</item>
            <item name="android:windowIsTranslucent">true</item>
            <item name="android:windowBackground">@android:color/transparent</item>
            <item name="android:windowAnimationStyle">@style/animation_translucent_translate</item>
           
        </style>

    解决办法就是,windowAnimationStyle需要继承Animation.Translucent,一般情况是继承的Animation.Activity,下面是代码:

    <!--  <style name="anim_activity" parent="@android:style/Animation.Activity">
            <item name="android:activityOpenEnterAnimation">@anim/activity_open_in_anim</item>
            <item name="android:activityOpenExitAnimation">@anim/activity_open_out_anim</item>
            <item name="android:activityCloseEnterAnimation">@anim/activity_close_in_anim</item>
            <item name="android:activityCloseExitAnimation">@anim/activity_close_out_anim</item>
        </style> -->
        <style name="animation_translucent_translate" parent="@android:style/Animation.Translucent">  
            <item name="android:windowEnterAnimation">@anim/activity_open_in_anim</item>  
            <item name="android:windowExitAnimation">@anim/activity_open_out_anim</item>  
        </style>

    问题解决。

    如果还没解决,就是手机动画效果关掉了,或者手机rom问题。。

    ------------------------------------------------------------------------------------

    设置Activity的切换动画,有两种方式:

    1.使用overridePendingTransition(新Activity进入动画, 旧Activity退出动画),需要紧接在startActivity 和finish()后。

    2.在manifest中配置Activity的theme。

    下面着重说明第二种情况:

      

     
    1. <style name="ThemeActivity" parent="AppBaseTheme">  
          <item name="android:windowAnimationStyle">@style/activityAnimatStyle</item>  
      </style>  
        
      <style name="activityAnimatStyle" parent="@android:style/Animation.Activity">  
        
          <!-- 新Activity 进入 -->  
          <item name="android:activityOpenEnterAnimation">@anim/animate_right_in</item>  
          <!-- 旧Activity退出 -->  
          <item name="android:activityOpenExitAnimation">@anim/animate_old_aphla</item>  
          <!-- 新Activity退出 -->  
          <item name="android:activityCloseExitAnimation">@anim/animate_left_out</item>  
          <!-- 旧Activity进入 -->  
          <item name="android:activityCloseEnterAnimation">@anim/animate_old_aphla</item>  
      </style>  


    现在有3个Activity:A、B、C:

    配置B的

     
    android:theme="@style/ThemeActivity"  

    这个时候 从A 启动B,会把android:activityOpenExitAnimation作用在A上,把android:activityOpenEnterAnimation作用在B上,此时从B回退到A,将使用系统默认的动画。

    若从B启动C,然后从C回退到B,此时才会将android:activityCloseExitAnimation作用在C,将android:activityCloseEnterAnimation作用在B。

    所以在使用manifest配置的时候,需要注意显示的target 所配置的属性,就如同overridePendingTransition一样。所以这四个属性决定的是【显示】当前Activity的时候,他的动画和与之关联的动画。

    我们可以在application 节点中配置theme,那么所有的Activity的进出动画都是一致的,如果要单独配置两个Activity的交互动画,可以如下配置:

    A-->B

    在A的theme中,只用声明:

     
    <!-- 新Activity退出 -->  
    <item name="android:activityCloseExitAnimation">@anim/animate_left_out</item>  
    <!-- 旧Activity进入 -->  
    <item name="android:activityCloseEnterAnimation">@anim/animate_old_aphla</item>  

    在B的theme中,只声明:

      

    <!-- 新Activity 进入 -->  
    <item name="android:activityOpenEnterAnimation">@anim/animate_right_in</item>  
    <!-- 旧Activity退出 -->  
    <item name="android:activityOpenExitAnimation">@anim/animate_old_aphla</item>  
     


    那么从A启动B时,会执行B声明的动画,此时要显示的是B,B是主体,当从B回退到A的时候,会执行A声明的动画,此时A是主体。

    此时应该很清楚这四个属性作用的时机了吧。

    这里还有一点要注意,如果使用了support包,theme的parent需要继承自Theme.AppCompat ,否则会报错。

    如下

     
    在CODE上查看代码片派生到我的代码片

    <style name="AppBaseTheme" parent="Theme.AppCompat.Light">  
      
     </style>  
      
     <!-- Application theme. -->  
     <style name="AppTheme" parent="AppBaseTheme">  
         <!-- All customizations that are NOT specific to a particular API-level can go here. -->  
     </style>  
      
     <style name="ThemeActivity" parent="AppBaseTheme">  
         <item name="android:windowAnimationStyle">@style/activityAnimatStyle</item>  
     </style>  
      
     <style name="activityAnimatStyle" parent="@android:style/Animation.Activity">  
      
         <!-- 新Activity 进入 -->  
         <item name="android:activityOpenEnterAnimation">@anim/animate_right_in</item>  
         <!-- 旧Activity退出 -->  
         <item name="android:activityOpenExitAnimation">@anim/animate_old_aphla</item>  
         <!-- 新Activity退出 -->  
         <item name="android:activityCloseExitAnimation">@anim/animate_left_out</item>  
         <!-- 旧Activity进入 -->  
         <item name="android:activityCloseEnterAnimation">@anim/animate_old_aphla</item>  
     </style>  

    测试代码路径 http://download.csdn.net/detail/luohaowang320/8295207

  • 相关阅读:
    阿里消息队列中间件 RocketMQ 源码分析 —— Message 拉取与消费(上)
    数据库中间件 ShardingJDBC 源码分析 —— SQL 解析(三)之查询SQL
    数据库分库分表中间件 ShardingJDBC 源码分析 —— SQL 解析(六)之删除SQL
    数据库分库分表中间件 ShardingJDBC 源码分析 —— SQL 解析(五)之更新SQL
    消息队列中间件 RocketMQ 源码分析 —— Message 存储
    源码圈 300 胖友的书单整理
    数据库分库分表中间件 ShardingJDBC 源码分析 —— SQL 路由(一)分库分表配置
    数据库分库分表中间件 ShardingJDBC 源码分析 —— SQL 解析(四)之插入SQL
    数据库分库分表中间件 ShardingJDBC 源码分析 —— SQL 路由(二)之分库分表路由
    C#中Math类的用法
  • 原文地址:https://www.cnblogs.com/niray/p/4251333.html
Copyright © 2011-2022 走看看