曾经的Android在Activity进行跳转的时候,只是非常生硬的进行切换,即使使用overPendingtransition(int inId,int outId)这个方法来给Activity增加一些切换动画效果也很是差强人意。而在Android 5.X中,Google对动画效果进行了更深一步的诠释,为Activity的转场效果设计了更加丰富的动画效果。

Android 5.X 提供了三种Transition类型:

  • 进入:一个进入的过渡动画决定Activity中的素有的视图怎么进入屏幕。

  • 退出:一个退出的过渡动画决定了一个Activity 中的所有视图怎么退出屏幕。

  • 共享元素:一个共享元素过渡动画决定两个Activity之间的过渡,怎么共享它们的视图。

进入和退出的效果包括:

  • explode(分解) ———从屏幕中间进或出,移动视图。

  • slide(滑动)———从屏幕边缘进或出,移动视图。

  • fade(淡出)———通过改变屏幕上视图的不透明度达到添加或移除的效果

    共享元素包括:

  • changeBounds———改变目标视图的布局边界

  • changeClipBounds———裁切目标视图边界

  • changeTransform———改变目标视图的缩放比例和旋转角度

  • changeImageTransfrom———改变目标图片的大小和缩放比例

目前市面上的应用,各个页面之间的转场动画总能给人眼前一亮的感觉。唯独对 共享元素这个Activity跳转过渡的效果情有独钟O(∩_∩)O。

下面看一下共享元素的运行效果(共享一个View):

实现过程:

  1. 首先需要给当前的Activity的布局文件中设置要共享的元素,给它增加相应的属性:

  1. 给跳转的Activity的布局文件也增加相同的属性,共享元素的属性名要保持一致。

注:一定要保证命名相同,这样系统才能找到共享元素

FirstActivity.java中的代码:

    //共享元素    public void share(View v){        Intent intent = new Intent(this,SecondActivity.class);        startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this,imageView,"share").toBundle());    }

这样一个简单的共享元素的Activity跳转效果就实现了。

同样也可以共享多个元素!

共享多个元素的运行效果:

共享多个元素,可以通过Pair.create(),来创建多个共享元素。

FirstActivity.java实现多个元素共享的代码如下:

   //共享多个多个元素    public void share_more(View v){        Intent intent = new Intent(this,SecondActivity.class);        ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this,                Pair.create(imageView,"share"),                Pair.create(v,"share1"));        startActivity(intent,options.toBundle());    }

另外的三种Activity过渡动画
的实现:

  • explode(分解) ———从屏幕中间进或出,移动视图。

  • slide(滑动)———从屏幕边缘进或出,移动视图。

  • fade(淡出)———通过改变屏幕上视图的不透明度达到添加或移除的效果

1.在需要设置动画的页面上设置如下所示代码:

getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);// 允许使用transitions 

也可以在样式文件中设置如下代码:

 <item name="android:windowContentTransitions">trueitem>

2.接下来就可以设置进入Activty或退出Activty的动画了

//进入动画   getWindow().setEnterTransition(new Explode().setDuration(500).setInterpolator(new AccelerateInterpolator()));                getWindow().setReturnTransition(new Explode().setDuration(500));

常用动画的设置:

getWindow().setEnterTransition(); //首次进入显示的动画        getWindow().setExitTransition(); //启动一个新Activity,当前页的退出动画       getWindow().setReturnTransition(); //调用 finishAfterTransition() 退出时,当前页退出的动画        getWindow().setReenterTransition(); //重新进入的动画。即第二次进入,可以和首次进入不一样。

这三个类都继承于 Transition ,所有有一些属性都是共同的。

常用属性如下:

// 设置动画的监听事件transition.addListener()// 设置动画的时间。类型:longtransition.setDuration();// 设置修饰动画,定义动画的变化率,具体设置往下翻就看到了transition.setInterpolator();// 设置动画开始时间,延迟n毫秒播放。类型:longtransition.setStartDelay();// 设置动画的运行路径transition.setPathMotion();// 改变动画 出现/消失 的模式。Visibility.MODE_IN:进入;Visibility.MODE_OUT:退出。transition.setMode();

可设置的插值器的类型:

AccelerateDecelerateInterpolator //在动画开始与结束的地方速率改变比较慢,在中间的时候加速AccelerateInterpolator  //在动画开始的地方速率改变比较慢,然后开始加速AnticipateInterpolator //开始的时候向后然后向前甩AnticipateOvershootInterpolator //开始的时候向后然后向前甩一定值后返回最后的值BounceInterpolator   //动画结束的时候弹起CycleInterpolator //动画循环播放特定的次数,速率改变沿着正弦曲线DecelerateInterpolator //在动画开始的地方快然后慢LinearInterpolator   //以常量速率改变OvershootInterpolator   // 向前甩一定值后再回到原来位置

3 . 需要将Activity跳转的代码startActivity(intent)的方法改为:

startActivity(intent,ActivityOptions.makeSceneTransitionAnimation(this).toBundle());

运行效果:

explode(分解):

slide(滑动):

fade(淡出):

Google重新定义了动画效果 (●’◡’●)

更多相关文章

  1. Android学习笔记:框架模式
  2. Android(安卓)ViewPager多页面滑动切换以及动画效果
  3. Android(安卓)4.0开发环境搭建和测试
  4. Android(安卓)Gallery子元素无法横向填满屏幕的问题解决
  5. Android小程序-Walker注册页面(四)
  6. Android视图优化之Merge,ViewStub基本使用
  7. Android(安卓)五大布局(LinearLayout、FrameLayout、AbsoulteLayo
  8. Android(安卓)资源简介(五) AnimationDrawable
  9. Android(安卓)的上下文菜单: Context Menu

随机推荐

  1. ubuntu环境下我的第一个android apk (201
  2. android 老是弹出 "Copy" did not comple
  3. ListView.setOnItemClickListener、setOn
  4. Android(安卓)入门到精通 (界面编程#2-Men
  5. android app 添加logo
  6. CCRenderTexture 从后台进入前台变黑的处
  7. android 二级菜单、双ListView 仿美团、
  8. Android中当item数量超过一定大小Recycle
  9. Android(安卓)菜单(OptionMenu)大全 建立
  10. Android——最新LitePal使用