NavigationDrawer: больше нет анимации на значке ящика при настройке прослушивателя ящика

Значок ящика‹- значок ящика

Если вы создаете в студии Android проект с навигационным ящиком, при открытии / закрытии ящика будет плавная анимация значка ящика.

Если я добавлю прослушиватель ящика в мой drawerlayout, больше не будет анимации, значок ящика больше не изменится:

DrawerLayout dl = (DrawerLayout) findViewById(R.id.drawer_layout);
    dl.setDrawerListener(new ActionBarDrawerToggle(this, dl,R.drawable.ic_drawer,R.string.navigation_drawer_open,R.string.navigation_drawer_close));

Я попытался переопределить методы ActionBarDrawerToggle, чтобы добавить вызовы syncState ().

   DrawerLayout dl = (DrawerLayout)findViewById(R.id.drawer_layout);

    mDrawerToggle = new ActionBarDrawerToggle(this, dl,
            R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close) {

        @Override
        public void onDrawerSlide(View drawerView, float slideOffset) {
            super.onDrawerSlide(drawerView, slideOffset);
            mDrawerToggle.syncState();
        }

        @Override
        public void onDrawerStateChanged(int newState) {
            super.onDrawerStateChanged(newState);
            mDrawerToggle.syncState();
        }

        public void onDrawerClosed(View view) {
            super.onDrawerClosed(view);
            mDrawerToggle.syncState();
        }

        /** Called when a drawer has settled in a completely open state. */
        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);
            mDrawerToggle.syncState();
        }
    };
    dl.setDrawerListener(mDrawerToggle);

Теперь, когда ящик открыт, у меня есть маленький значок, а затем он переключается на большой значок, когда ящик закрыт, но у меня нет плавной анимации.

Кто-нибудь знает, как добиться плавной анимации?


person Patrick    schedule 24.06.2014    source источник


Ответы (3)


Попробуйте поместить @Override аннотации, которые отсутствуют для последних двух слушателей, и удалите все syncState() вызовы. Вызовите syncState () из onPostCreate вашей активности:

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    // Sync the toggle state after onRestoreInstanceState has occurred.
    mDrawerToggle.syncState();
}
person Pedro    schedule 25.06.2014
comment
Просто попробовал, поведения не меняет: анимации нет. - person Patrick; 25.06.2014

У меня была такая же проблема. Прошло много времени с тех пор, как этот вопрос был задан, но если вам все еще интересно, вот мой ответ.

положил

invalidateOptionsMenu(); 

вместо того

syncstate();

для onDrawerClosed (), onDrawerOpened (), onDrawerSlide (), onDrawerStateChanged ()

Также положите

@Override

protected void onPostCreate(Bundle savedInstanceState){

        super.onPostCreate(savedInstanceState);

        mDrawerToggle.syncState();
}

@Override

public void onConfigurationChanged(Configuration newConfig) {

        super.onConfigurationChanged(newConfig);

        mDrawerToggle.onConfigurationChanged(newConfig);
}
person qrian3    schedule 08.05.2015

Использовать логическое значение как false .._ 1_

public void onDrawerSlide(View drawerView, float slideOffset) {
            if(slideOffset > .55 && !isDrawerOpen){
                super.onDrawerSlide(drawerView, 1);
                onDrawerOpened(drawerView);
                isDrawerOpen = true;
            } else if(slideOffset < .45 && isDrawerOpen) {
                super.onDrawerSlide(drawerView,slideOffset);
                onDrawerClosed(drawerView);
                isDrawerOpen = false;
            }
        }

        public void onDrawerClosed(View view) {
            getActionBar().setTitle("Your title");
            invalidateOptionsMenu();
        }

        public void onDrawerOpened(View drawerView) {
            getActionBar().setTitle("your title");
            invalidateOptionsMenu();
        }
    };
person goonerDroid    schedule 30.09.2014
comment
Я пробовал ваше решение, но оно не решает мою проблему: у меня нет плавной анимации (я вижу только значок открытого ящика, затем значок закрытого ящика, а не анимацию). - person Patrick; 06.10.2014