Android DrawerLayout 滞后
Android DrawerLayout Lagging
DrawerLayout 需要很长时间才能关闭
这是我的代码:
@Override
public void onDrawerOpened(View drawerView) {
if (items.size() == 0)
view.setVisibility(View.GONE);
else view.setVisibility(View.VISIBLE);}
super.onDrawerOpened(drawerView);
invalidateOptionsMenu();
}
有解决办法吗?
你包括了吗
actionBarDrawerToggle.syncState()
syncState() 到底做了什么?
嗯,ActionBarDrawerToggle.syncState() 会同步改变图标的状态,这取决于 DrawerLayout 的动作。如果您曾经尝试删除 syncState(),您会发现箭头图标将不再旋转。
您的问题是 onDrawerOpened()
方法在抽屉完全打开之前不会触发。感知到的延迟是由于 View
在打开期间可见。
一种解决方案是禁用拖动抽屉,只允许切换打开和关闭抽屉。然后,您可以在以编程方式打开它之前进行尺寸检查。但是,这需要在每个 onDrawerOpened()
和 onDrawerClosed()
方法中将抽屉锁定到适当的状态,当然,您将失去标准的交互模式。
首选的选项可能是在抽屉开始打开时尽快进行检查和可见性设置。我们可以在 onDrawerSlide()
方法中执行此操作,保留一个 boolean
标志来确定抽屉在关闭后是否正在滑动。例如:
actionBarDrawerToggle = new ActionBarDrawerToggle(...) {
private boolean opened;
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
super.onDrawerSlide(drawerView, slideOffset);
if (slideOffset == 0) {
opened = false;
}
else {
if (!opened) {
opened = true;
if (items.size() == 0) {
view.setVisibility(View.GONE);
}
else {
view.setVisibility(View.VISIBLE);
}
}
}
}
...
}
DrawerLayout 需要很长时间才能关闭 这是我的代码:
@Override
public void onDrawerOpened(View drawerView) {
if (items.size() == 0)
view.setVisibility(View.GONE);
else view.setVisibility(View.VISIBLE);}
super.onDrawerOpened(drawerView);
invalidateOptionsMenu();
}
有解决办法吗?
你包括了吗
actionBarDrawerToggle.syncState()
syncState() 到底做了什么?
嗯,ActionBarDrawerToggle.syncState() 会同步改变图标的状态,这取决于 DrawerLayout 的动作。如果您曾经尝试删除 syncState(),您会发现箭头图标将不再旋转。
您的问题是 onDrawerOpened()
方法在抽屉完全打开之前不会触发。感知到的延迟是由于 View
在打开期间可见。
一种解决方案是禁用拖动抽屉,只允许切换打开和关闭抽屉。然后,您可以在以编程方式打开它之前进行尺寸检查。但是,这需要在每个 onDrawerOpened()
和 onDrawerClosed()
方法中将抽屉锁定到适当的状态,当然,您将失去标准的交互模式。
首选的选项可能是在抽屉开始打开时尽快进行检查和可见性设置。我们可以在 onDrawerSlide()
方法中执行此操作,保留一个 boolean
标志来确定抽屉在关闭后是否正在滑动。例如:
actionBarDrawerToggle = new ActionBarDrawerToggle(...) {
private boolean opened;
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
super.onDrawerSlide(drawerView, slideOffset);
if (slideOffset == 0) {
opened = false;
}
else {
if (!opened) {
opened = true;
if (items.size() == 0) {
view.setVisibility(View.GONE);
}
else {
view.setVisibility(View.VISIBLE);
}
}
}
}
...
}