在浏览片段时正确处理DrawerLayout动画

Jay*_*ing 18 animation android android-fragments navigation-drawer

我正在努力DrawerLayout搞动画做奇怪的事情; 该汉堡包图标是laggy,往往从汉堡包切换,而动画箭头,如果我不把一个处理器延迟fragment交易的动画.

所以我最终放了一个处理程序,等到汉堡包图标执行动画,但我们不需要等到抽屉接近切换片段就感觉不自然了.我确信有更好的方法可以解决这个问题......

这是我目前的做法:

private void selectProfilFragment() {
    final BackHandledFragment fragment;
    // TODO test this again
    Bundle bundle = new Bundle();
    bundle.putString(FragmentUserProfile.USER_FIRST_NAME, user.getFirstname());
    bundle.putString(FragmentUserProfile.USER_LAST_NAME, user.getLastname());
    bundle.putString(FragmentUserProfile.USER_PICTURE, user.getProfilepic());
    bundle.putString(FragmentUserProfile.USER_EMAIL, user.getEmail());
    bundle.putBoolean(FragmentUserProfile.USER_SECURITY, user.getParameters().getSecuritymodule().equals("YES"));
    fragment = new FragmentUserProfile();
    fragment.setArguments(bundle);
    mDrawerLayout.closeDrawer(mDrawerLinear);

    new Handler().postDelayed(new Runnable() {
        public void run() {
            FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
            ft.setCustomAnimations(R.anim.pull_in_right, R.anim.push_out_left, R.anim.pull_in_left, R.anim.push_out_right);
            ft.replace(R.id.content_frame, fragment)
                    .addToBackStack(fragment.getTagText())
                    .commitAllowingStateLoss();
        }
    }, 300);
}
Run Code Online (Sandbox Code Playgroud)

它仍然毛刺在之间一点点DrawerLayout的关闭和开启片段交易的动画.

这是我如何实现抽屉:

mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);

mDrawerListChild.setAdapter(new DrawerListAdapter(this, R.layout.drawer_layout_item, mPlanTitles));
mDrawerListChild.setOnItemClickListener(new DrawerItemClickListener());

mProfilPic.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        selectProfilFragment();
    }
});

mDrawerToggle = new ActionBarDrawerToggle(
        this,
        mDrawerLayout,
        toolbar,
        R.string.drawer_open,
        R.string.drawer_close
) {
    public void onDrawerClosed(View view) {
        invalidateOptionsMenu();
    }

    public void onDrawerOpened(View drawerView) {
        invalidateOptionsMenu();
    }
};
getSupportFragmentManager().addOnBackStackChangedListener(mOnBackStackChangedListener);
mDrawerLayout.setDrawerListener(mDrawerToggle);
setSupportActionBar(toolbar);
Run Code Online (Sandbox Code Playgroud)

Pra*_*iya 3

我不确定是什么导致了这种行为,但我想提请您注意几件事。

  1. 我不知道ActionBarDrawerToggle您正在使用哪个类,但最好使用android.support.v7.app.ActionBarDrawerToggle它,因为android.support.v4.app.ActionBarDrawerToggle它已被弃用。

  2. 使用addDrawerListener()代替,setDrawerListener()因为它已被弃用。

  3. 使用spinBars并设置值true以在过渡期间旋转条。ex 位于styles.xml中,如此所述。

  4. onDrawerClosed调用syncState(onDrawerOpened ) 。还要在您的. 检查这个ActionBarDrawerToggle

    希望对你有帮助。