Transition Animation系列文章

  1. Android动画——Activity转场动画|过渡动画一点薄见(一)((Transition Animation 系列))
  2. android动画——过渡动画中ActivityOptions介绍与使用((Transition Animation 系列))

1. 序言

对于Android 5.0 之前,Android的过渡动画一般情况下使用:

overridePendingTransition(enterAnim, exitAnim);

android 5.0及以上,google提供了新的转场动画方式,及这里要介绍使用的ActivityOptions,并且提供了兼容包ActivityOptionsCompat。根据当前android版本的发展情况,本文就主要讲ActivityOptions,其兼容包使用方法一样。

ActivityOptions是一个静态类,提供了如下方法:

  • makeCustomAnimation(Context context, int enterResId, int exitResId)
  • makeScaleUpAnimation(View source, int startX, int startY, int width, int height)
  • makeThumbnailScaleUpAnimation(View source, Bitmap thumbnail, int startX, int startY)
  • makeSceneTransitionAnimation(Activity activity)
  • makeSceneTransitionAnimation(Activity activity, View sharedElement, String sharedElementName)
  • makeSceneTransitionAnimation(Activity activity, Pair... sharedElements)
  • 。。。。。。

ActivityOptions的主要方法如上,这也是最主要的几种过渡方式,接下来将一一介绍各个方法的使用方式。

2. ActivityOptions使用

2.1 makeCustomAnimation

如果定义转场效果等,对于这方面如果不清楚的话,可以查看Android动画——Activity转场动画|过渡动画一点薄见(一)((Transition Animation 系列))的前半部分

使用方法

ActivityOptions compat = ActivityOptions.makeCustomAnimation(this, R.anim.anim_activity_in, R.anim.anim_activity_out);                startActivity(new Intent(MainActivity.this, SecondActivity.class), compat.toBundle());

makeCustomAnimation方法需要3个参数:

  • 第一个参数:Context类型,也就是Activity。
  • 第二个参数:int类型,新Activity显示动画。
  • 第三个参数:int类型,当前Activity的退出动画。

这个方法与android 5.0之前的overridePendingTransition类似,故使用较少。
备注

  • 启动activity的方式是使用ActivityCompat.startActivity
  • 如果调用finish()退出Activity,则需要调用finishAfterTransition()进行退出动画

2.2 makeScaleUpAnimation

这个方法的转场效果时:

在新Activity会一某个点为中心,从某个大小开始逐渐放大到最大

使用方法示例:

ActivityOptions compat = ActivityOptions.makeScaleUpAnimation(mImage, mImage.getWidth(), mImage.getHeight(),0,0);startActivity(new Intent(MainActivity.this, SecondActivity.class), compat.toBundle());

这个方法有五个参数:

  • 第一个参数:View类型,从那个View的坐标开始放大
  • 第二个参数:int类型,指定相对于View的X坐标为放大中心的X坐标
  • 第三个参数:int类型,指定相对于View的Y坐标为放大中心的Y坐标
  • 第四个坐标:int类型,指定放大前新Activity是多宽
  • 第五个坐标:int类型,指定放大前新Activity是多高

2.3 makeThumbnailScaleUpAnimation

该方法与上面一个方法类似,转场效果是:

放大一个图片,最后过渡到一个新的Activity

使用方法

ActivityOptions compat = ActivityOptions.makeThumbnailScaleUpAnimation(mTextView,BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher),0,0);startActivity(new Intent(MainActivity.this, SecondActivity.class), compat.toBundle());

该方法需有4个参数:

  • 第一个参数:View类型,要放大的图片从哪个View的左上角的坐标作为中心点放大。
  • 第二个参数:Bitmap类型,指定要放大的图片。
  • 第三个参数:放大前图片的初始宽度
  • 第四个参数:放大前图片的初始高度

2.4 makeSceneTransitionAnimation

使用方法:

Intent intent = new Intent(MainActivity.this, SecondActivity.class);                startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(MainActivity.this).toBundle());

这个方法没什么可说的,就是简单的Activity转场

2.5 makeSceneTransitionAnimation(重点)

第二个这个方法是需要关注的重点,主要用于共享动画,关于共享动画的内容,可以查看Android动画——Activity转场动画|过渡动画一点薄见(一)((Transition Animation 系列))的共享动画部分

转场效果:

两个Activity的两个View协同完成转场,也就是原Activity的View过度到新Activity的View,原新两个Activity的View的transitionName相同。

使用方法

Intent intent1 = new Intent(MainActivity.this, SharedElementActivity.class);startActivity(intent1, ActivityOptions.makeSceneTransitionAnimation(MainActivity.this,mImage,"image").toBundle());

activity_main.xmlactivity_shared_element.xml的布局文件中都有一个ImageView,他们的android:transitionName属性值是一样的。

这个方法有三个参数:

  • 第一个参数:Context类型,指定Activity
  • 第二个参数:View类型,指定从哪里过渡
  • 第三个参数:String类型,过渡View的标志,即android:transitionName的属性值

2.6 makeSceneTransitionAnimation(重点)

转场效果:

前面一个方法是单个View协作转场,这个方法可以实现多个view协作转场

使用方法:

Intent intent = new Intent(MainActivity.this, SharedElementActivity.class);Pair<View, String> p1 = Pair.create((View)textView1, "profile");Pair<View, String> p2 = Pair.create((View)textView, "test");startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(MainActivity.this,p1,p2).toBundle());

首先通过Pair.Create静态方法创建两个Pair对象,这里有两个泛型,分别指定为View和String,Create方法接收,第一个参数是参与动画的Veiw,第二个是该View的transitionName,与前面的单一协作转场类似。

更多相关文章

  1. 修改Android开机图片、动画、声音
  2. 创建android逐帧动画的两种方式 布局和java代码
  3. android上传图片和参数(属性)到服务器
  4. GifView——Android显示GIF动画
  5. Android动画循环弹动cycleInterpolator

随机推荐

  1. 让editView、AutoCompleteTextView开始捕
  2. UI设计
  3. Android开发人员不得不收集的代码(持续更
  4. Android(安卓)HIDL 简介
  5. 第九篇 ANDROID包管理服务机制与架构
  6. Android(安卓)Service总结03 之被启动的
  7. 使用Struts2服务端与android交互
  8. Androidの通过查询电话号码或ID获取联系
  9. android基本的数据库创建和使用
  10. Android(安卓)Studio 没有assets目录的问