Last active
August 29, 2015 13:59
-
-
Save ChaseFlorell/10673476 to your computer and use it in GitHub Desktop.
An Android Navigation Drawer that supports single and dual sliding drawers.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using Android.App; | |
using Android.Support.V4.App; | |
using Android.Support.V4.Widget; | |
using Android.Views; | |
namespace FutureState.BreathingRoom.Droid.Ui | |
{ | |
public class ActionBarDrawerEventArgs : EventArgs | |
{ | |
public View DrawerView { get; set; } | |
public float SlideOffset { get; set; } | |
public int NewState { get; set; } | |
} | |
public delegate void ActionBarDrawerChangedEventHandler(object s, ActionBarDrawerEventArgs e); | |
public class DrawerToggler : ActionBarDrawerToggle | |
{ | |
private readonly DrawerLayout _drawerLayout; | |
private readonly View _leftDrawerView; | |
private readonly View _rightDrawerView; | |
public DrawerToggler(Activity activity, DrawerLayout drawerLayout, int drawerImageRes, int openDrawerContentDescRes, int closeDrawerContentDescRes) | |
: base(activity, drawerLayout, drawerImageRes, openDrawerContentDescRes, closeDrawerContentDescRes) | |
{ } | |
public DrawerToggler(Activity activity, DrawerLayout drawerLayout, int drawerImageRes, int openDrawerContentDescRes, int closeDrawerContentDescRes, View leftDrawerView, View rightDrawerView) | |
: base(activity, drawerLayout, drawerImageRes, openDrawerContentDescRes, closeDrawerContentDescRes) | |
{ | |
_drawerLayout = drawerLayout; | |
_leftDrawerView = leftDrawerView; | |
_rightDrawerView = rightDrawerView; | |
} | |
public event ActionBarDrawerChangedEventHandler DrawerClosed; | |
public event ActionBarDrawerChangedEventHandler DrawerOpened; | |
public event ActionBarDrawerChangedEventHandler DrawerSlide; | |
public event ActionBarDrawerChangedEventHandler DrawerStateChanged; | |
public override void OnDrawerClosed(View drawerView) | |
{ | |
if (null != DrawerClosed) | |
DrawerClosed(this, new ActionBarDrawerEventArgs { DrawerView = drawerView }); | |
base.OnDrawerClosed(drawerView); | |
if (_leftDrawerView == null || _rightDrawerView == null || _drawerLayout == null) return; | |
_drawerLayout.SetDrawerLockMode(DrawerLayout.LockModeUnlocked, | |
drawerView == _rightDrawerView | |
? _leftDrawerView | |
: _rightDrawerView); | |
} | |
public override void OnDrawerOpened(View drawerView) | |
{ | |
if (null != DrawerOpened) | |
DrawerOpened(this, new ActionBarDrawerEventArgs { DrawerView = drawerView }); | |
base.OnDrawerOpened(drawerView); | |
if (_leftDrawerView == null || _rightDrawerView == null || _drawerLayout == null) return; | |
_drawerLayout.SetDrawerLockMode(DrawerLayout.LockModeLockedClosed, | |
drawerView == _rightDrawerView | |
? _leftDrawerView | |
: _rightDrawerView); | |
} | |
public override void OnDrawerSlide(View drawerView, float slideOffset) | |
{ | |
if (null != DrawerSlide) | |
DrawerSlide(this, new ActionBarDrawerEventArgs | |
{ | |
DrawerView = drawerView, | |
SlideOffset = slideOffset | |
}); | |
// only slide the left nav item | |
// not working as I would like. | |
if ((drawerView == _leftDrawerView) || (_leftDrawerView == null && _rightDrawerView == null)) | |
{ | |
base.OnDrawerSlide(drawerView, slideOffset); | |
} | |
} | |
public override void OnDrawerStateChanged(int newState) | |
{ | |
if (null != DrawerStateChanged) | |
DrawerStateChanged(this, new ActionBarDrawerEventArgs | |
{ | |
NewState = newState | |
}); | |
base.OnDrawerStateChanged(newState); | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// <summary> | |
/// Navigation Drawer Configuration | |
/// </summary> | |
private void SetNavigationDrawerConfiguration() | |
{ | |
// Left Drawer Config | |
_drawerToggler = new DrawerToggler(this, | |
_rootViewLayout, // found using FindViewById | |
Resource.Drawable.ic_drawer_light, | |
Resource.String.drawer_open, | |
Resource.String.drawer_close, | |
_leftDrawerLayout, // found using FindViewById | |
_rightDrawerLayout);// found using FindViewById | |
_drawerToggler.DrawerClosed += delegate { InvalidateOptionsMenu(); }; | |
_drawerToggler.DrawerOpened += delegate | |
{ | |
_leftDrawerList.SetItemChecked(_leftDrawerPosition, true); | |
_rightDrawerList.SetItemChecked(_rightDrawerPosition, true); | |
InvalidateOptionsMenu(); | |
}; | |
_rootViewLayout.SetDrawerShadow(Resource.Drawable.drawer_shadow_dark, (int)GravityFlags.Left); // left drawer shadow | |
_rootViewLayout.SetDrawerShadow(Resource.Drawable.right_drawer_shadow_dark, (int)GravityFlags.Right); // right drawer shadow | |
_rootViewLayout.SetDrawerListener(_drawerToggler); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment