android5.0的过度动画

最近一直研究5.0的过度动画,网上找了好多帖子、博文,千篇一律,一个博文或者一个帖子,引申出好多,然并卵,基本上都说的是一共分成两种方法:

一,代码实现:

<span style="font-size:12px;">Fade fade = new Fade();
        fade.setDuration(2000);
        getWindow().setReenterTransition(fade);</span>
<span style="font-size:12px;"><pre name="code" class="java">Intent intent = new Intent(MainActivity.this, SlideActivity.class);
                startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());</span>

第二个activity

<span style="font-size:12px;">getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
getWindow().setEnterTransition(new Explode());
getWindow().setExitTransition(new Explode());
//getWindow().setReenterTransition(new Explode());
//getWindow().setReturnTransition(new Explode());
setContentView()</span>
二,xml实现

在res目录下,新建一个transition文件夹,创建xxx.xml文件(就是动画xml)

<span style="font-size:12px;"> explode.xml

<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
    <explode
        android:duration="500"
        android:interpolator="@android:interpolator/accelerate_decelerate" />
</transitionSet>

silde.xml

<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
    <slide
        android:duration="500"
        android:interpolator="@android:interpolator/accelerate_decelerate" />
</transitionSet>

fade.xml

<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
    <fade
        android:duration="500"
        android:interpolator="@android:interpolator/accelerate_decelerate" />
</transitionSet>
</span>
style:

<span style="font-size:12px;"> <style name="BaseAppTheme" parent="android:Theme.Material">
   <!-- enable window content transitions -->
   <item name="android:windowContentTransitions">true</item>
 
   <!-- specify enter and exit transitions -->
   <item name="android:windowEnterTransition">@transition/explode</item>
   <item name="android:windowExitTransition">@transition/explode</item>

   <!-- specify shared element transitions -->
   <item name="android:windowSharedElementEnterTransition">
     @transition/change_image_transform</item>
  <item name="android:windowSharedElementExitTransition">
     @transition/change_image_transform</item>
</style></span>
activity跳转
<span style="font-size:12px;">Intent intent = new Intent(MainActivity.this, SlideActivity.class);
                startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());</span>
相信自己亲手写过并调试过的都会出现一种情况,用xml写,没有效果,反正我没做出来,效果一直出不来,知道在第二个activity里边加入如下代码:

<span style="font-size:12px;">getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
getWindow().setEnterTransition(new Explode());
getWindow().setExitTransition(new Explode());
//getWindow().setReenterTransition(new Explode());
//getWindow().setReturnTransition(new Explode());
setContentView()</span>
但是,什么情况,这不是代码实现的动画吗?既然这样,那干嘛还浪费时间写xml动画啊,没办法继续研究吧

终于找到一篇文章,感谢作者的分享http://www.cnblogs.com/littlepanpc/p/4521624.html

首先,在你定义一个继承自材料主题的风格时,通过android:windowContentTransitions属性激活窗口内容过渡效果。你也可以在风格定义中指定出入和共享元素过渡效果:

<span style="font-size:12px;"><style name="BaseAppTheme" parent="android:Theme.Material">
  <!-- enable window content transitions -->
  <item name="android:windowContentTransitions">true</item>

  <!-- specify enter and exit transitions -->
  <item name="android:windowEnterTransition">@transition/explode</item>
  <item name="android:windowExitTransition">@transition/explode</item>

  <!-- specify shared element transitions -->
  <item name="android:windowSharedElementEnterTransition">
    @transition/change_image_transform</item>
  <item name="android:windowSharedElementExitTransition">
    @transition/change_image_transform</item>
</style></span>
这个例子子中的change_image_transform过渡效果定义如下:
<span style="font-size:12px;"><pre name="code" class="java"> <!-- res/transition/change_image_transform.xml -->
 <!-- (see also Shared Transitions below) -->
 <transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
   <changeImageTransform/>
 </transitionSet></span>

changeImageTransform元素对应于ChangeImageTransform类。

要想激活代码中的窗口内容过渡效果,得调用Window.requestFeature()方法:

<span style="font-size:12px;"> // inside your activity (if you did not enable transitions in your theme)
 getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
 getWindow().setExitTransition(new Explode());</span>
要在代码中指定过渡效果,调用这些方法使用Transition类:

<span style="font-size:12px;">Window.setEnterTransition();
Window.setExitTransition();
Window.setSharedElementEnterTransition();
Window.setSharedElementExitTransition();</span>

方法setEnterTransition()setSharedElementExitTransition()给调用者Acivity定义了退出过渡效果,而方法setEnterTransition()setSharedElementEnterTransition()为被调用者定义了进入过渡效果。

为了获取过渡的全部效果,你必须激活调用和被调用Activity的窗口内容过渡效果。否则的话,否则的话,调用者Activity将会启动退出过渡效果,但是你会看到这个窗口过渡效果的(例如缩放或者褪色)。

为了尽可能早的启动进入过渡效果,得在被调用Activity中使用Window.setAllowEnterTransitionOverlap()。这将使你拥有更多戏剧般美妙的进入过渡效果。

也可以这么理解:

1. 在style中使用使用android:windowContentTransitions属性,声明使用transitions,

2. 需要在xml中自定义自己的transitions,然后需要在style中写入

<span style="font-size:12px;"><!--指定进入和退出的transitions-->
        <item name="android:windowEnterTransition">@transition/explode</item>
        <item name="android:windowExitTransition">@transition/explode</item>

        <item name="android:windowReenterTransition">@transition/explode</item>
        <item name="android:windowReturnTransition">@transition/explode</item></span>
3. 在代码中启用transitions:

<span style="font-size:12px;">// inside your activity (if you did not enable transitions in your theme)
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
 
// set an exit transition
getWindow().setExitTransition(new Explode());</span>
无语,终于弄明白了,要不是自己去试了,就被网上那些博文,帖子坑惨了,等到真正用的时候,指不定出现什么问题呢
















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值