我已将以下代码放入导航抽屉的 onDrawerSlide 方法,以便在抽屉打开时移动内容。
public void onDrawerSlide(View drawerView, float slideOffset) {
super.onDrawerSlide(drawerView, slideOffset);
container.setTranslationX(slideOffset * drawerView.getWidth());
mDrawerLayout.bringChildToFront(drawerView);
mDrawerLayout.requestLayout();
}
除了第一个应用程序运行之外,它几乎总能完美运行 - 我以编程方式打开抽屉,教导用户使用它。 所以,当我打电话
时if (!mUserLearnedDrawer && !mFromSavedInstanceState) {
mDrawerLayout.openDrawer(mFragmentContainerView);
}
抽屉正在打开,但未调用 onDrawerSlide
我想,原因是某些东西没有足够的时间来装载,但我不知道究竟是什么以及如何逃避这一点。
它在我在运行后几秒钟内通过处理程序调用 openDrawer 时有效,但在UI上看起来很糟糕。
PS。尝试在 onCreate , onResume 中调用 openDrawer ,在调用活动时仍然没有结果。
PPS。此外,我无法直接调用 onDrawerSlide - 因为我不知道 slideOffset 值。
答案 0 :(得分:0)
我认为当您以编程方式打开抽屉以教用户使用它时,您需要使用DrawerLayout.DrawerListener.onDrawerSlide(View drawerView, float slideOffset)
或Handler
来调用AsyncTask
,这会及时更改{{1}的值在slideOffset
中。
就像:
[0, 1]
然后你这样打电话:
private Handler mUIHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case UPDATE_SLIDING_INDEX:
double slideOffSet= (double)msg.obj;
if (slideOffSet> 0.0 && slideOffSet<= 1.0) {
drawerListener.onDrawerSlide(drawer, slideOffSet);
Message message = mUIHandler.obtainMessage();
message.what = UPDATE_SLIDING_INDEX;
message.obj = slideOffSet- 0.1;
mUIHandler.sendMessageDelayed(message, 100);
} else {
//To do something here.
}
break;
default:
break;
}
}
};
答案 1 :(得分:0)
在以下if条件之前或之后调用mDrawerLayout.setDrawerListener(....);
时。
if (!mUserLearnedDrawer && !mFromSavedInstanceState) {
mDrawerLayout.openDrawer(mFragmentContainerView);
}
如果是之后,显然不会调用onDrawerSlide。
如果是在那之前你应该调试。