java - android滞后片段过渡
问题描述
基本上我有一个带有单个活动和 5 个片段的应用程序。由于片段布局的创建需要一秒钟,我改变了我的方法,它不会重新创建片段,只是隐藏和显示它们。
private void openFragment(int index)
{
if(index == activeFragment)
{
return;
}
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
//Set animations
if(activeFragment < index)
{
ft.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left);
} else {
ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
}
//Hide old Fragment
if (Fragments.get(activeFragment).isAdded())
{
ft.hide(Fragments.get(activeFragment));
Fragments.get(activeFragment).getView().setTranslationZ(0);
}
//Add/Show new Fragment
if (Fragments.get(index).isAdded())
{ // if the fragment is already in container
ft.show(Fragments.get(index));
Fragments.get(index).getView().setTranslationZ(1f);
} else { // fragment needs to be added to frame container
ft.add(R.id.fragment_container, Fragments.get(index), Integer.toString(index));
}
// Commit changes
ft.commit();
}
问题是动画卡顿,即使我更改为只有一个RecyclerView
和 10 个项目的片段。如果我第一次启动片段,加载也需要很长时间,即使我在OnCreate
方法中创建片段(所以它需要很长时间,因为它正在将片段添加到片段容器中?需要半秒对于只有RecyclerView
) 的容器。但是,如果我不设置任何过渡,片段会立即显示出来,并有一点延迟(可能是 30 毫秒,甚至不值得一提)。为什么主线程对动画如此不堪重负,它不必创建任何视图,只需淡出一个片段并淡入另一个片段。
如何处理片段,以便在它们之间平滑过渡,同时保持尽可能低的延迟?我使用 aBottomNavigationView
来浏览片段,所以它必须立即打开,这就是我保存片段的原因。
解决方案
推荐阅读
- export - Outfiile 忽略 -Erroraction ?尝试/捕捉不起作用..?
- django - Django admin如何按模型属性排序?
- javascript - 使用 for 循环代替过滤器
- excel - 在声明两个单独的工作簿时遇到问题 - 当我这样做时出现类型不匹配错误
- java - 无法销毁或停止 OnClick RecycleView 侦听器
- flutter - 只是音频颤振包支持 accADTs 文件格式,因为它在购买的 android 和 iOS 中都支持
- r - 如何在 r 中对同年而不是同月进行分组
- ios - 如何理解 objc 中的 ARC
- php - 在 laravel 中用于多行插入的 insertGetId 的替代方法是什么
- python - 为什么我在使用 urllib.request 时有时会收到“需要 407 身份验证”?