How do I change my button image with navigation drawer opening and closing

荒凉一梦 提交于 2019-12-04 15:48:19

When you've set up the drawer a listener has been added which has callbacks for when the drawer is in either final state, so what you need to do is reset the drawable inside these callbacks. I've shown what I think your final code should look like, minus some cleaning up you need to do, hope it helps

private DrawerLayout drawerLayout;
private NavigationPanelFragment dlDrawer;
private ActionBarDrawerToggle actionBarDrawerToggle;
private ImageButton mDrawerButton; //Store it! - findViewById is *Expensive*
private TextView mTitle;

@Override
protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);
    mTitle = (TextView) findViewById(R.id.main_title);
    mDrawerButton = (ImageButton) findViewById(R.id.button_main);
    drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout,
            R.drawable.arrow_up, R.string.drawer_open, R.string.drawer_close) {

        public void onDrawerClosed(View view) {
            mDrawerButton.setImageResource(R.drawable.bg_helios_inactive);
        }

        public void onDrawerOpened(View drawerView) {
            mDrawerButton.setImageResource(R.drawable.bg_helios_active);
        }

    };
    drawerLayout.setDrawerListener(actionBarDrawerToggle);
    setupOnClickListenerForMainButton(;
}

@Override //Note: I'd imagine this should be in onResume ...
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    actionBarDrawerToggle.syncState();
}

private void setupOnClickListenerForMainButton() {
    mDrawerButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(final View v) {
            toggleNavigationPanel();
        }
    });
}

...

private void toggleNavigationPanel() {
    //if ( drawerLayout.isOpen() ) { //I dont know what methods these objects have
    if ( dlDrawer.isOpen() ) { //but one of these must be sensibly storing its own state
        updateActionBarTitle();
        drawerLayout.closeDrawer(R.id.drawer);
    } else {
        drawerLayout.openDrawer(R.id.drawer);
        mTitle.setText(getString(R.string.title_applications));
    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!