Skip to content

DrawerLayout-like ViewGroup, where a "drawer" is hidden under the content view, which can be shifted to make the drawer visible.

License

Notifications You must be signed in to change notification settings

yarolegovich/SlidingRootNav

Repository files navigation

SlidingRootNav

The library is a DrawerLayout-like ViewGroup, where a "drawer" is hidden under the content view, which can be shifted to make the drawer visible. It doesn't provide you with a drawer builder.

GifSample

Gradle

Add this into your dependencies block.

compile 'com.yarolegovich:sliding-root-nav:1.1.1'

Sample

Please see thesample appfor a library usage example.

Wiki

Usage:

  1. Create your content_view.xml (example) or construct aViewprogramatically.
  2. Set the content view (for example, usingsetContentViewin your activity).
  3. Create your menu.xml (example) or construct aViewprogramatically.
  4. Now you need to inject the menu in youronCreate.You can specify transformations of a content view or use the default ones.
newSlidingRootNavBuilder(this)
.withMenuLayout(R.layout.menu_left_drawer)
.inject();

API

Transformations

You can specify root transformations usingSlidingRootNavBuilder.

newSlidingRootNavBuilder(this)
.withDragDistance(140)//Horizontal translation of a view. Default == 180dp
.withRootViewScale(0.7f)//Content view's scale will be interpolated between 1f and 0.7f. Default == 0.65f;
.withRootViewElevation(10)//Content view's elevation will be interpolated between 0 and 10dp. Default == 8.
.withRootViewYTranslation(4)//Content view's translationY will be interpolated between 0 and 4. Default == 0
.addRootTransformation(customTransformation)
.inject();

customTransformationin the above example is a user-created class that implementsRootTransformationinterface. For an example, refer to thedefault transformations.

Menu behavior

newSlidingRootNavBuilder(this)
.withMenuOpened(true)//Initial menu opened/closed state. Default == false
.withMenuLocked(false)//If true, a user can't open or close the menu. Default == false.
.withGravity(SlideGravity.LEFT)//If LEFT you can swipe a menu from left to right, if RIGHT - the direction is opposite.
.withSavedState(savedInstanceState)//If you call the method, layout will restore its opened/closed state
.withContentClickableWhenMenuOpened(isClickable)//Pretty self-descriptive. Builder Default == true

Controling the layout

A call toinject()returns you an interface for controlling the layout.

publicinterfaceSlidingRootNav{
booleanisMenuClosed();
booleanisMenuOpened();
booleanisMenuLocked();
voidcloseMenu();
voidcloseMenu(booleananimated);
voidopenMenu();
voidopenMenu(booleananimated);
voidsetMenuLocked(booleanlocked);
SlidingRootNavLayoutgetLayout();//If for some reason you need to work directly with layout - you can
}

Callbacks

  • Drag progress:
builder.addDragListener(listener);

publicinterfaceDragListener{
voidonDrag(floatprogress);//Float between 0 and 1, where 1 is a fully visible menu
}
  • Drag state changes:
builder.addDragStateListener(listener);

publicinterfaceDragStateListener{
voidonDragStart();
voidonDragEnd(booleanisMenuOpened);
}
  • Compatibility withDrawerLayout.DrawerListener:
DrawerListenerAdapteradapter=newDrawerListenerAdapter(yourDrawerListener,viewToPassAsDrawer);
builder.addDragListener(listenerAdapter).addDragStateListener(listenerAdapter);

Special thanks

Thanks toTayisiya Yurkivfor a beautiful GIF.

License

Copyright 2017 Yaroslav Shevchuk

Licensed under the Apache License, Version 2.0 (the "License" );
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http:// apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.