Android 动画——过渡动画中ActivityOptions介绍与使用((Transition Animation 系列))

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,与前面的单一协作转场类似。

你可能感兴趣的:(Android视图动效)