简单的前言
为Fragment中添加进场和退出动画是一个很简单的用法,主要就是依靠 FragmentManager 的 setCustomAnimations() 或者 setTransition() 方法,这是两种不同方式设置动画,具体的使用方式参考下面案例。
setCustomAnimations()
// 后面两个参数是在回退栈中添加和退出的动画,如果不添加到回退栈可以忽略
// setCustomAnimations(enter, exit, popEnter, popExit)
// setCustomAnimations(enter, exit)
getSupportFragmentManager()
.beginTransaction()
.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_right, R.anim.slide_in_right, R.anim.slide_out_right)
.add(R.id.framlayout, new FilePickerFragment())
.addToBackStack(null)
.commit();
setTransition()
getSupportFragmentManager()
.beginTransaction()
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.add(R.id.framlayout, new FilePickerFragment())
.addToBackStack(null)
.commit();
// ---------------------------------------------------------------------------------------
// onCreateAnimation() 是 Fragment 的一个方法,配合 setTransition() 使用
public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) {
if (transit == FragmentTransaction.TRANSIT_FRAGMENT_OPEN) {
if (enter) {
// 表示普通的进入的动作,比如add、show、attach等
return AnimationUtils.loadAnimation(getContext(), R.anim.anim_bottom_in);
} else {
// 比如一个Fragmen已经被另一个replace,被replace的那个就是false
return AnimationUtils.loadAnimation(getContext(), R.anim.anim_out);
}
} else if (transit == FragmentTransaction.TRANSIT_FRAGMENT_CLOSE) {
if (enter) {
// 之前被replace的重新进入到界面或者Fragment回到栈顶
return AnimationUtils.loadAnimation(getContext(), R.anim.anim_in);
} else {
// 表示一个退出动作,比如出栈、remove、hide、detach等
return AnimationUtils.loadAnimation(getContext(), R.anim.anim_bottom_out);
}
}
return null;
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。