我目前正在努力用DrawerLayout
动画做怪异的东西; 汉堡包图标是laggy,并且如果我没有让Handler延迟fragment
交易动画,它通常会从没有动画的汉堡包切换到箭头。正确处理DrawerLayout动画,同时浏览片段
所以我结束了一个处理程序,直到汉堡包图标执行动画,但是我们不需要等到抽屉靠近切换片段时才感到不自然。我敢肯定有一个更好的办法来处理这个......
这里是我目前如何:
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);
}
它仍然毛刺在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);
我猜想BackHandledFragment的初始化有大量的处理。 改变BackHandledFragment's'onCreateView'和'onActivityCreated'简单,并且延迟重处理。 – nshmura
这不是问题,但因为它只发生在配置文件片段... – Jaythaking
对不起,我犯了一个错误。 FragmentUserProfile的初始化是否有重要的检索? – nshmura