Android动画之ActivityOptionsCompat概述

ActivityOptionsCompat概述

Android动画之Activity切换动画overridePendingTransition实现和Theme Xml方式实现
这里只是简单介绍ActivityOptionsCompat的使用后面文章会有更具体讲解。

利用overridePendingTransition实现转场动画可以在android2.0开始使用,google在Android5.0提出了MD的设计风格,并扩充了Activity的转场动画,利用ActivityOptions和ActivityOptionsCompat可以实现新风格的转场动画。ActivityOptionsCompat是ActivityOptions的兼容包,虽然是兼容包但内部有的动画风格在5.0以下的版本依然不支持,只不过坚持在低版本使用ActivityOptionsCompat的动画不会出错,所以下面会重点讲解ActivityOptionsCompat。

前面讲解了利用ActivityOptionsCompat实现了共享元素动画,请看 共享元素动画

ActivityOptionsCompat 主要用于生成Context.startActivity(Intent, Bundle) 所需要的 options Bundle 再配合其他方法实现转场动画。

注意:
要使用新的过渡动画需要在style中设置windowContentTransitions为true,作用是开启Transition动画:
true
或者利用代码:
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
必须要添加在super.onCreate(savedInstanceState)之前

2 ActivityOptions 提供的静态方法,实现切换效果

提供的静态方法:

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

makeCustomAnimation(Context context, int enterResId, int exitResId)

用户自定义动画,指定进入和退出动画,api16开始支持
参数说明:
enterResId:Activity进入动画资源id
exitResId:Activity退出动画资源id

代码示例:从Main8Activity启动Main7Activity,然后从Main7Activity回到Main8Activity

ActivityOptionsCompat activityOptionsCompat = ActivityOptionsCompat.makeCustomAnimation(Main8Activity.this, R.anim.translate_left_in, R.anim.translate_right_out);
Intent intent = new Intent(Main8Activity.this, Main7Activity.class);
startActivity(intent,activityOptionsCompat.toBundle());
Android动画之ActivityOptionsCompat概述_第1张图片
image

可以看到进入Main7Activity时Main8Activity和Main7Activity的动画都执行了。

makeClipRevealAnimation (View source, int startX, int startY, int width, int height)

从一个view的剪切区域放大然后打开新的Activity,Api23开始支持,
参数说明:
startX,startY:区域起点,利用source作为原点
width,height:区域宽高

ActivityOptionsCompat activityOptionsCompat = ActivityOptionsCompat.makeClipRevealAnimation(gongxiang, 30,30,50,50);
Intent intent = new Intent(Main8Activity.this, Main7Activity.class);
startActivity(intent,activityOptionsCompat.toBundle());
Android动画之ActivityOptionsCompat概述_第2张图片
image

效果不太明显

makeScaleUpAnimation(View source, int startX, int startY, int width, int height)

放大一个view,然后显示新的Activity
参数说明:
view:放大的view
startX,startY:从哪里开始缩放,以source为原点
width,height:新的activity从多大开始放大,如果是0,0则表示从最小开始。

ActivityOptionsCompat activityOptionsCompat = ActivityOptionsCompat.makeScaleUpAnimation(gongxiang, gongxiang.getWidth() / 2, gongxiang.getHeight() / 2, 0, 0);
Intent intent = new Intent(Main8Activity.this, Main7Activity.class);
startActivity(intent,activityOptionsCompat.toBundle());
Android动画之ActivityOptionsCompat概述_第3张图片
image

makeThumbnailScaleUpAnimation(View source, Bitmap thumbnail, int startX, int startY)

放大一张图片,然后打开activity
参数说明
source:参考原点
thumbnail:要放大的图片
startX,startY:从哪里开始放大,以source为坐标原点

Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.compositedst1);
ActivityOptionsCompat activityOptionsCompat = ActivityOptionsCompat.makeThumbnailScaleUpAnimation(gongxiang,bitmap ,300,500);
Intent intent = new Intent(Main8Activity.this, Main7Activity.class);
startActivity(intent,activityOptionsCompat.toBundle());
Android动画之ActivityOptionsCompat概述_第4张图片
image

效果很不明显,只可以看到一闪而过的图片

makeSceneTransitionAnimation(Activity activity, View sharedElement, String sharedElementName)

makeSceneTransitionAnimation(Activity activity, Pair... sharedElements)
参考共享元素动画文章
共享元素动画

使用ActivityOptionsCompat之后虽然感觉很新奇,但是除了共享元素动画之外其他的动画设置都很受限,后面会介绍Transition说明新的利用Transition自定义进入,退出动画的方式。

Animation动画概述和执行原理
Android动画之补间动画TweenAnimation
Android动画之逐帧动画FrameAnimation
Android动画之插值器简介和系统默认插值器
Android动画之插值器Interpolator自定义
Android动画之视图动画的缺点和属性动画的引入
Android动画之ValueAnimator用法和自定义估值器
Android动画之ObjectAnimator实现补间动画和ObjectAnimator自定义属性
Android动画之ObjectAnimator中ofXX函数全解析-自定义Property,TypeConverter,TypeEvaluator
Android动画之AnimatorSet联合动画用法
Android动画之LayoutTransition布局动画
Android动画之共享元素动画
Android动画之ViewPropertyAnimator(专用于view的属性动画)
Android动画之Activity切换动画overridePendingTransition实现和Theme Xml方式实现
Android动画之ActivityOptionsCompat概述
Android动画之场景变换Transition动画的使用
Android动画之Transition和TransitionManager使用
Android动画之圆形揭露动画Circular Reveal
Android 动画之 LayoutAnimation 动画
Android动画之视图动画的缺点和属性动画的引入

你可能感兴趣的:(Android动画之ActivityOptionsCompat概述)