android转场动画windowAnimation和ActivityAnimation

转自:http://my.oschina.net/ososchina/blog/355239


显而易见,window与Activity本身从名字上就知道不同,但对于项目开发中 windowAnimation和ActivityAnimation的区别必须心领神会。

区别主要如下

1.windowAnimation包括windowEnterAnimationwindowExitAnimation;ActivityAnimation包含android:activityOpenEnterAnimationandroid:activityOpenExitAnimationandroid:activityCloseEnterAnimationandroid:activityCloseExitAnimation

2.在项目中WindowAnimation的控制权大于Activity的控制权,即在Activity转场过程中,如果同时设置了WindowAnimation和ActivityAnimation,那么可能(因为这种情况非常多)只会执行WindowAnimation

3.对于WindowAnimation的定义很简单,在style.xml文件中只需要继承Animation Style即可

?
1
2
3
4
5
6
    <style name= "Animation"  parent= "@android:style/Animation" >
           <!--窗体进入动画-->
         <item name= "android:windowEnterAnimation" > @anim /slide_left_enter</item>
         <!--窗体退出动画-->
         <item name= "android:windowExitAnimation" > @anim /slide_right_exit</item>
     </style>

对于Activity,需要继承Animation Activity Style

?
1
2
3
4
5
6
<style name= "FeelyouWindowAnimTheme"  parent= "@android:style/Animation.Activity" >
         <item name= "android:activityOpenEnterAnimation" > @android :anim/slide_in_left</item>
         <item name= "android:activityOpenExitAnimation" > @android :anim/slide_out_right</item>
         <item name= "android:activityCloseEnterAnimation" > @anim /push_right_in</item>
         <item name= "android:activityCloseExitAnimation" > @anim /push_left_out</item>
</style>

?
1
2
3
4
当我们从 A1 启动 A2 时,A1 从屏幕上消失,这个动画叫做 android:activityOpenExitAnimation
当我们从 A1 启动 A2 时,A2 出现在屏幕上,这个动画叫做 android:activityOpenEnterAnimation
当我们从 A2 退出回到 A1 时,A2 从屏幕上消失,这个叫做 android:activityCloseExitAnimation
当我们从 A2 退出回到 A1 时,A1 出现在屏幕上,这个叫做 android:activityCloseEnterAnimation

从上述2中动画的定义上来看,显然ActivityAnimation更为复杂,但这种复杂带来的转场效果非常好,可以同时控制2个Activity的动画,而不像WindowAnimation只能控制下一个Activity的窗体动画。

5.在开发中,窗体动画也可以使用 Activity.overridePendingTransition来设置,也可以定义在主题中,但Activity只能使用在主题中

?
1
2
3
4
5
6
7
8
9
10
<application
         android:name= "test.view.weitop.BaseApplication"
         android:allowBackup= "false"
         android:hardwareAccelerated= "false"
         android:icon= "@drawable/app_logo"
         android:label= "@string/app_name"
         android:largeHeap= "true"
         android:theme= "@style/Theme.App"  >
         
</application>

6.对于比较追求界面美感的动画,使用ActivityAnimation要好得多,因此对于一般开发使用windowAnimation即可,但对于追求用户体验,那么直接使用Activity Animation 吧


这里分享了一篇关于Activity动画的研究博客:http://www.oschina.net/question/97118_34343

-------------------------------------------------2014-12-27新增内容------------

Android布局动画,所谓布局动画并不是指专门作用在ViewGroup上的动画,而是作用到不居中的Child的有序动画

1.LayoutAnimationController --->第三方控件 WheelView的核心部分

?
1
2
3
4
5
  ScaleAnimation sa = new  ScaleAnimation( 0 .5f, 1f,  0 .5f, 1f, Animation.RELATIVE_TO_SELF,  0 .5f, Animation.RELATIVE_TO_SELF,  0 .5f);
             sa.setDuration( 2000 );
             LayoutAnimationController lac =  new  LayoutAnimationController(sa,  0 .5f);
             lac.setOrder(LayoutAnimationController.ORDER_REVERSE);
             rootView.setLayoutAnimation(lac);

2.android:animateLayoutChanges="true"

表示布局中childView的的大小改变,删除,增加时的 fade in 或者 fade out的动画

3.android:layoutAnimation="@anim/listview_anim" 

android:layoutAnimation 和LayoutAnimationController作用类似,不同点在于,前者定义在xml中,后者使用代码编写


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
A: 可以使用共享元素转场动画实现这种效果。具体步骤如下: 1. 在两个 Activity 中选定相同的 View 作为共享元素,设置相同的 transitionName。 ```xml <!--activity1--> <ImageView android:id="@+id/shared_element" android:transitionName="shared_element"/> <!--activity2--> <ImageView android:id="@+id/shared_element" android:transitionName="shared_element"/> ``` 2. 在启动 Activity2 时,设置共享元素的转场动画。 ```kotlin // activity1 val intent = Intent(this, Activity2::class.java) // 设置共享元素的转场动画 val options = ActivityOptions.makeSceneTransitionAnimation(this, sharedElement, "shared_element") startActivity(intent, options.toBundle()) ``` ```xml // activity2 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity2) // 设置共享元素的转场动画 ViewCompat.setTransitionName(sharedElement, "shared_element") // 延迟进入动画,等待布局完成 window.decorView.postDelayed({ startEnterAnimation() }, 100) } private fun startEnterAnimation() { val enterAnimation = AnimationUtils.loadAnimation(this, R.anim.translate_in_from_right_bottom) enterAnimation.duration = 500 sharedElement.startAnimation(enterAnimation) } ``` 3. 在 Activity2 中,在退出时设置返回动画,并在动画结束后调用 `finish()` 方法。 ```kotlin override fun onBackPressed() { // 设置返回动画 val exitAnimation = AnimationUtils.loadAnimation(this, R.anim.translate_out_to_left_top) exitAnimation.duration = 500 sharedElement.startAnimation(exitAnimation) // 在动画结束后调用 finish() 方法 exitAnimation.setAnimationListener(object : Animation.AnimationListener { override fun onAnimationStart(animation: Animation?) {} override fun onAnimationEnd(animation: Animation?) { finishAfterTransition() } override fun onAnimationRepeat(animation: Animation?) {} }) } ``` 对应的动画资源文件 `translate_in_from_right_bottom.xml` 和 `translate_out_to_left_top.xml` 可以自己定义,这里提供一组示例: ```xml <!--translate_in_from_right_bottom.xml--> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="500" android:fromXDelta="100%p" android:fromYDelta="100%p"/> <!--translate_out_to_left_top.xml--> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="500" android:toXDelta="-100%p" android:toYDelta="-100%p"/> ``` 运行效果如下: ![](https://img-blog.csdnimg.cn/2022011319273689.gif#pic_center)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值