Here is the link to recording while pressing back button
虽然我在片段交易中使用动画但它工作正常,但我得到了下一个屏幕的闪烁,这让我烦恼。我一直在寻找它,因为2天没有进展。
我正在使用此代码进行转换
public void moveToBaseSelect() {
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.setCustomAnimations(R.anim.enter_from_right,R.anim.exit_to_left,R.anim.enter_from_left,R.anim.exit_to_right);
ft.replace(R.id.home_frame, new BaseSelectFragment(), HomeActivity.BASE_SELECT);
ft.addToBackStack(HomeActivity.BASE_SELECT);
ft.commit();
}
public void moveToLogin()
{
if(fragmentManager.getBackStackEntryCount()>=1 && fragmentManager.getBackStackEntryAt(fragmentManager.getBackStackEntryCount()-1).getName().equals(HomeActivity.LOGIN))
return;
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.setCustomAnimations(R.anim.enter_from_right,R.anim.exit_to_left,R.anim.enter_from_left,R.anim.exit_to_right);
ft.replace(R.id.home_frame, new LoginFragment(), HomeActivity.LOGIN);
ft.addToBackStack(HomeActivity.LOGIN);
ft.commit();
}
动画文件
从左边输入
<set>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="500"
android:fillAfter="true"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromXDelta="-100%p"
android:toXDelta="0%p" />
</set>
</set>
从右边输入
<?xml version="1.0" encoding="utf-8"?>
<set>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="500"
android:fillAfter="true"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromXDelta="100%p"
android:toXDelta="0%p" />
</set>
</set>
退出左侧
<?xml version="1.0" encoding="utf-8"?>
<set>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="500"
android:fillAfter="true"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromXDelta="0%p"
android:toXDelta="-100%p" />
</set>
</set>
退出到右边
<?xml version="1.0" encoding="utf-8"?>
<set>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="500"
android:fillAfter="true"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromXDelta="0%p"
android:toXDelta="100%p" />
</set>
</set>
我尝试过使用animator代替anim和app.fragment代替v4.fragment
的替代方法但我非常好奇,如果我坚持使用动画方法,我知道有没有解决方法
答案 0 :(得分:5)
删除动画文件中的
我的动画XML:
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_mediumAnimTime"
android:fromXDelta="0%"
android:toXDelta="-100%" />
答案 1 :(得分:2)
问题是因为commit()是异步的,并且可能是某些竞争条件导致了闪烁。通过使事务管理器执行commitNow()而不是commit()
来解决