因为要新增一个页面,突然想试试转场动画,做完以后还是做个笔记,防止以后忘记了不好找…
5.0以上才行,但是如果手机没有5.0则会执行默认普通情况
有3种效果,分别是:
举个栗子:
ActivityA跳转到ActivityB
ActivityA的跳转方法
startActivity(intent,ActivityOptions.makeSceneTransitionAnimation(this).toBundle());
ActivityB的设置
在ActivityB的onCreate()生命周期的setContentView()之前设置:
getWindow().requestFeature(Window.FRATURE_CONTENT_TRANSITIONS);
或
在style文件内添加属性
<item name="android:windowContentTransitions">trueitem>
同时根据需要的的过渡动画进行设置
(设置在getWindow().requestFeature()方法之后,setContentView()方法之前)
getWindow().setEnterTransition(new Explode());
getWindow().setEnterTransition(new Slide());
getWindow().setEnterTransition(new Fade());
这种才叫高端,这种看起来才cooooool..
共享元素包括:
还是举个栗子:
比如说2个Activity共享一个Button.
那么需要在2个Activity的Button上面同时添加
android:transitionName = "xxx";
切记2个Activity的Button的这个属性的值得一致.
最后在ActivityA跳转到ActivityB时:
startActivity(intent,
ActivityOptions.makeSceneTransitionAnimation(
this,
共享的组件,
"约定好的那个属性名").toBundle());
如果需要共享多个元素,那么就是用Pair.create()来创建多个元素
startActivity(intent,
ActivityOptions.makeSceneTransitionAnimation(
this,
Pair.create(共享组件1,"约定好的属性名1"),
Pair.create(共享组件2,"约定好的属性名2"))
.toBundle());
http://www.jianshu.com/p/e9f63ead8bf5
借鉴的是这个.
举个简单粗暴的栗子:
共享元素之间同时添加约定好的
android:transitionName = "xxx";
创建好需要跳转的Fragment ==> XXFragment
XXFragment fragment =new XXFragment();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
detailFragment.setSharedElementEnterTransition(new DetailTransition());
setExitTransition(new Fade());
fragment.setEnterTransition(new Fade());
fragment.setSharedElementReturnTransition(new DetailTransition());
}
getActivity().getSupportFragmentManager().beginTransaction()
.addSharedElement(共享组件,"约定好的属性名")
.replace(Activity的容器id, fragment)
.addToBackStack(null)
.commit();
}
自定义动画:
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public class DetailTransition extends TransitionSet {
public DetailTransition() {
init();
}
// 允许资源文件使用
public DetailTransition(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
setOrdering(ORDERING_TOGETHER);
addTransition(new ChangeBounds()).
addTransition(new ChangeTransform()).
addTransition(new ChangeImageTransform());
}
}