21

次のライブラリを使用してアプリ ドロワーを作成しました: http://developer.android.com/training/implementing-navigation/nav-drawer.html

アプリを開いたときにナビゲーション ドロワーをアニメーションで表示したい。どうやってやるの?

4

3 に答える 3

53

predraw リスナー、別名セーフウェイ

predraw リスナーの例を次に示します。できるだけ早くアニメーションを文字通り開始しますが、少し速すぎるかもしれません。これと、2 番目に表示されるランナブルを組み合わせて実行することをお勧めします。2 つを組み合わせて表示するのではなく、個別に表示します。

@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 リスナーを使用するか、onPause でランナブルを削除することです。

于 2013-11-09T22:02:13.807 に答える
7

を呼び出しopenDrawer(int gravity)DrawerLayout、アニメーションで引き出しを開くことができます。

于 2013-08-06T02:42:03.357 に答える