Ответ 1
прослушиватель Predraw, а также безопасность
Вот пример прослушивателя. Это буквально запустит анимацию, как только это возможно, что может быть слишком быстро. Возможно, вы захотите сделать комбинацию этого с показанной секундой. Я не буду показывать две комбинированные, только отдельные.
@Override
protected void onCreate(Bundle savedInstanceState) {
...
// Building NavDrawer logic here. Just a method call would be best.
...
ViewTreeObserver vto = drawer.getViewTreeObserver();
if (vto != null) vto.addOnPreDrawListener(new ShouldShowListener(drawer));
}
private static class ShouldShowListener implements OnPreDrawListener {
private final DrawerLayout drawerLayout;
private ShouldShowListener(DrawerLayout drawerLayout) {
this.drawerLayout= drawerLayout;
}
@Override
public boolean onPreDraw() {
if (view != null) {
ViewTreeObserver vto = view.getViewTreeObserver();
if (vto != null) {
vto.removeOnPreDrawListener(this);
}
}
drawerLayout.openDrawer(Gravity.LEFT);
return true;
}
}
PostDelay Runnable, известный как опасный
// Delay is in milliseconds
static final int DRAWER_DELAY = 200;
@Override
protected void onCreate(Bundle savedInstanceState) {
...
// Building NavDrawer logic here. Just a method call would be best.
...
new Handler().postDelayed(openDrawerRunnable(), DRAWER_DELAY);
}
private Runnable openDrawerRunnable() {
return new Runnable() {
@Override
public void run() {
drawerLayout.openDrawer(Gravity.LEFT);
}
}
}
Внимание
Если они впервые начинают вращаться в начале приложения BOOM! Прочитайте это сообщение в блоге для получения дополнительной информации http://corner.squareup.com/2013/12/android-main-thread-2.html. Лучше всего было бы использовать приемник predraw или удалить ваш runnable в onPause.