【发布时间】:2017-03-01 09:27:03
【问题描述】:
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
但我非常想知道如果我坚持使用动画方法有什么解决方案
【问题讨论】:
-
代码看起来没问题。在切换 Fragment 时,您是否正在做任何会阻塞主线程的工作?
-
你能分享你调用这些函数的代码吗?我想看看流量。还要提及是否在所有转换(如前进和后退)上都发生闪烁?
-
我只是在点击按钮时调用上述函数
-
我从 27.0.2 -> 27.1.0 更新了支持库,我看到了类似的东西
-
@darnmason 在这里完全相同,我恢复到 27.0.2 并且闪烁消失了。此解决方法:stackoverflow.com/questions/49180295/… 为我修复了它,而无需返回 27.0.2。
标签: android animation fragment android-transitions