Android:Activity切换动画、overridePendingTransition、fragment动画

1.跟overridePendingTransition(enterAnim, exitAnim)这个方法有关,可以设置出入的动画。

1
2
3
4
5
6
7
8
9
10
findViewById(R.id.button2).setOnClickListener( new  OnClickListener()
{
     @Override
     public  void  onClick(View v)
     {
         Intent intent =  new  Intent(OneActivity. this , TwoActivity. class );
         startActivity(intent );
         overridePendingTransition( 0 0 ); //去掉Activity切换间的动画
     }
});


代码设置动画:

启动后

1
2
startActivity( new  Intent(A. this , B. class ));
overridePendingTransition(inAnim, outAnim);


结束时

1
2
finish();
activity.overridePendingTransition(inAnim, outAnim);






2.通过style设置全局的activity动画

主题style:

1
2
3
<style name= "Theme.Test"  parent= "@android:style/Theme.Light.NoTitleBar" >
     <item name= "android:windowAnimationStyle" > @style /Animation.Activity.Test</item>
</style>



动画style:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<style name= "Animation.Activity.Test"  parent= "@android:style/Animation.Activity" >
     <item name= "android:activityOpenEnterAnimation" > @anim /activity_open_enter</item>
     <item name= "android:activityOpenExitAnimation" > @anim /activity_open_exit</item>
     <item name= "android:activityCloseEnterAnimation" > @anim /activity_close_enter</item>
     <item name= "android:activityCloseExitAnimation" > @anim /activity_close_exit</item>
           
     <item name= "android:taskOpenEnterAnimation" > @anim /activity_open_enter</item>
     <item name= "android:taskOpenExitAnimation" > @anim /activity_open_exit</item>
     <item name= "android:taskCloseEnterAnimation" > @anim /activity_close_enter</item>
     <item name= "android:taskCloseExitAnimation" > @anim /activity_close_exit</item>
           
     <item name= "android:taskToFrontEnterAnimation" > @anim /activity_open_enter</item>
     <item name= "android:taskToFrontExitAnimation" > @anim /activity_open_exit</item>
     <item name= "android:taskToBackEnterAnimation" > @anim /activity_close_enter</item>
     <item name= "android:taskToBackExitAnimation" > @anim /activity_close_exit</item>
</style>





2.fragment动画

Fragment过度动画分析

Sliding Fragment

介绍:该案例为传统的Fragment增加了个性化的补间动画,其效果是原有fragment向屏幕内做一定的下沉,新的fragment显示在最上层,产生层叠效果的多个fragments。
Video: http://www.youtube.com/watch?v=xbl5cxfA1n4

Source:http://developer.android.com/shareables/devbytes/SlidingFragments.zip

wKioL1P0Vp_SK8TDAAU7OLBt1Gw163.jpgwKiom1P0a4ywN2PcAATGDEZXGNs525.jpg


本文将简单分析其实现流程及原理
Step1:添加Fragment并设置点击的切换事件
首先添加一个fragment,并设置显示内容已做区别,案例中显示了一张图片,接着设置单击事件,为了使得我们单击任意位置都能触发fragment的切换动画,这
里需要为用于展示图片的fragment,显示文本的fragment以及黑色背景view都添加该事件监听器。

Step2:fragment切换实现
这里只有2个fragment,一个是用于显示图片,另一个显示文本,预期效果是单击屏幕后,图片下沉,文本显示到顶层,再次单击后则恢复原状,即,文本消失>,图片上浮。
分析这些动画的顺序和效果,图片的下沉可以通过一个组合animation来做,1.缩放,例如缩小为原图80%,2.旋转,这里的下层效果是首先图片x轴旋转40度,>然后再将旋转角度设置为0,3.添加一个半透明的遮罩,以示图片当前出于幕后状态,


文本的出现则在图片的动作完成后,通过manager动态讲其添加到画面上,这里的文本不是全屏的,否则就看不到后面的图片背景,文本的出现也可以添加动画>,这里文本出现时由下至上,消失时由上至下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
private  void  switchFragments () {
         if  (mIsAnimating) {
             return ;
         }
         mIsAnimating =  true ;
         if  (mDidSlideOut) {
             mDidSlideOut =  false ;
             getFragmentManager().popBackStack();
         else  {
             mDidSlideOut =  true ;
  
             AnimatorListener listener =  new  AnimatorListenerAdapter() {
                 @Override
                 public  void  onAnimationEnd(Animator arg0) {
                     FragmentTransaction transaction = getFragmentManager().beginTransaction();
                     transaction.setCustomAnimations(R.animator.slide_fragment_in,  0 0 ,
                             R.animator.slide_fragment_out);
                     transaction.add(R.id.move_to_back_container, mTextFragment);
                     transaction.addToBackStack( null );
                     transaction.commit();
                 }
             };
             slideBack (listener);
         }
     }




本文转自 glblong 51CTO博客,原文链接:http://blog.51cto.com/glblong/1226248,如需转载请自行联系原作者

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值