首页 > 解决方案 > 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来浏览片段,所以它必须立即打开,这就是我保存片段的原因。

标签: javaandroidandroid-fragmentsanimation

解决方案


推荐阅读