【发布时间】:2017-10-23 08:01:36
【问题描述】:
我在一个活动中有两个片段。 当我从片段 A 转到片段 B 时,已添加自定义动画。这样片段 B 的视图在入口处从右侧滑入,然后在出口处从右侧滑出。
但是可以看到片段 B 是从片段 A 的视图后面进入的。所以当片段 A 被片段 B 替换时,片段 B 的视图是从右到左的动画,但它是从视图的后面进入的片段 A 而不是 在 Fragment A 前面。
我能够注意到这一点,因为 Fragment A 的一半是透明的,而 Fragment B 滑入只能从透明的一半看到,这表明它是从 Fragment A 的后面滑入,而不是从前面滑入。
不完全确定为什么会这样。下面提供了相应的代码。 有人可以帮忙吗?
private void navigateToFragment(@NonNull Fragment fragment, boolean addToBackStack, int enterAnim, int exitAnim, int popEnterAnim, int popExitAnim) {
FragmentManager fragmentManager = getSupportFragmentManager();
final FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.setCustomAnimations(enterAnim, exitAnim, popEnterAnim, popExitAnim);
transaction.replace(R.id.member_address_root, fragment, fragment.getClass().getSimpleName());
if (addToBackStack){
transaction.addToBackStack(fragment.getTag());
}
fragmentManager.executePendingTransactions();
transaction.commit();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_member_address);
if (savedInstanceState == null){
if (getIntent() != null){
Fragment fragment = FragmentA.newInstance();
navigateToFragment(fragment, false, R.anim.no_animation, R.anim.no_animation, R.anim.no_animation, R.anim.no_animation);
}
}
}
@Override
public void onFragmentBRequested() {
FragmentB fragment = new FragmentB();
navigateToFragment(fragment, true, R.anim.enter_from_right, R.anim.no_animation, R.anim.no_animation, R.anim.exit_from_right);
}
onFragmentBRequested() 基于按钮单击从 FragmentA 调用。
【问题讨论】:
-
您没有为片段 (R.anim.no_animation) 提供退出动画。您应该在那里指定动画,例如 (R.anim.exit_to_left)
-
我为 popExit 提供退出动画,而不是正常退出。那是基于特定的要求。问题是在进入动画期间,Fragment B 在进入时,它的视图是从 Fragment A 视图的后面而不是从 Fragment A 的前面进入的
-
好的,所以您希望片段 A 保持原样,而片段 B 应该通过滑动动画接管?
-
不,我希望在片段 B 的滑动完成后片段 A 消失。这正如预期的那样发生。问题是当片段 B 滑入时,它的视图从片段 A 的视图后面滑动。我能够注意到这一点,因为片段 A 的一半是透明的,而片段 B 滑入只能从透明的一半看到,表明它正在从 Fragment A 后面和前面滑入。
标签: android android-fragments android-animation android-transitions