android滞后片段过渡

时间:2020-04-19 16:27:17

标签: java android android-fragments animation

基本上,我有一个具有单个活动和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方法创建片段的,因为它是将片段添加到片段容器中,所以花费这么长时间)?仅包含BottomNavigationView的容器需要半秒钟。但是,如果我不设置任何过渡,则片段会立即显示,只是稍有延迟(也许30ms,甚至不值得一提)。为什么主线程被动画淹没了,而不必创建任何视图,只需要淡入一个片段然后淡入另一个片段即可。

如何处理片段,以便可以在片段之间平稳过渡,同时将延迟保持得尽可能低?我使用this浏览片段,因此必须立即打开,这就是保存片段的原因。

0 个答案:

没有答案