Can I open the drawer layout with animation programmatically?

前端 未结 3 557
孤城傲影
孤城傲影 2020-12-09 16:24

I created the app drawer by using the following library: http://developer.android.com/training/implementing-navigation/nav-drawer.html

I want to show the Navigation

3条回答
  •  温柔的废话
    2020-12-09 17:29

    Predraw listener, aka the safeway

    Here is the predraw listener example. It will literally start the animation as soon as it can which maybe a little too fast. You might want to do a combination of this with a runnable shown second. I will not show the two combined, only separate.

    @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, aka living dangerous

    // 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);
            }
        }
    }
    

    WARNING

    If they rotate on the start of the app for the first time BOOM! Read this blog post for more information http://corner.squareup.com/2013/12/android-main-thread-2.html. Best thing to do would be to use the predraw listener or remove your runnable in onPause.

提交回复
热议问题