过渡动画
在Android5.X提供了三种Transition类型
- 进入
- 退出
共享元素
其中进入和退出效果包括:
explode(分解)
- slide(滑动)
- fade(淡出)
共享元素包括:
- changeBounds——改变目标视图的布局边界
- changeClipBounds——裁剪目标视图边界
- changeTransform——改变目标视图的缩放比例和旋转角度
- changeImageTransform——改变目标图片的大小和缩放比例
在ActivityA中
startActivity(intent,ActicityOptions.makeSceneTransitionAnimation(this).toBundle());
在ActivityB中
getWindow().requestFeature(Winddow.FEATURE_CONTENT_TRANSITIONS);
或者在样式文件中设置如下:
<item name="android:windowContentTransitions">true</item>
如下设置进入ActivityB具体动画效果:
getWindow().setEnterTransition(new Explode());
getWindow().setEnterTransition(new Slide());
getWindow().setEnterTransition(new Fade());
如下设置退出ActivityB的具体动画:
getWindow().setExitTransition(new Explode());
getWindow().setExitTransition(new Slide());
getWindow().setExitTransition(new Fade());
共享元素:
在Activity1的布局文件中设置共享的元素,给它增加相应的属性:
android:transitionName="XXX"
在Activity2的布局文件中设置同样的共享的元素,给它增加相应的属性:
android:transitionName="XXX"
注意:命名需一致系统才能找到共享元素
在Activity1中代码:
startActivity(intent,
ActicityOptions.makeSceneTransitionAnimation(
view,
"share").toBundle());
如果有多个共享的元素,可以通过Pair.create():
startActivity(intent,
ActicityOptions.makeSceneTransitionAnimation(
this,
Pair.create(view,"share"),
Pair.create(fab,"fab")).toBundle());
上边的需要在Api21以上才可以使用,另一种方式在4.0以上可以使用:
ActivityOptionsCompat compat = ActivityOptionsCompat
.makeScaleUpAnimation(
tv_share,
(int) tv_share.getX(),
(int) tv_share.getY(),
0, 0);
startActivity(intent, compat.toBundle());