SlidingRootNav
這是一個像DrawerLayout
一樣的抽屜式的導航庫,這個庫實現的抽屜在content view的下層,滑動之后,才能看到相應的導航頁
使用
Gradle
添加依賴
compile 'com.yarolegovich:sliding-root-nav:1.0.2'
使用說明
- 創建一個 content_view.xml或通過編程方式創建
- 在Activity中設置view(setContentView)
- 創建menu.xml或通過編程方式創建
- 在onCreate方法中注入菜單。
new SlidingRootNavBuilder(this)
.withMenuLayout(R.layout.menu_left_drawer)
.inject();
API
過場動畫
創建時可以添加一些過場動畫,庫本身提供一些默認的過場。
new SlidingRootNavBuilder(this)
.withDragDistance(140) //水平動畫. Default == 180dp
.withRootViewScale(0.7f) //設置主view的縮放比例0~0.7. 默認值 == 0.65f;
.withRootViewElevation(10) //主view垂直方向的值 0~10dp. 默認值 == 8.
.withRootViewYTranslation(4) //主view y軸方向的過場0~4. 默認值 == 0
.addRootTransformation(customTransformation) // 添加自定義過場
.inject();
customTransformation
是自定義的,需要實現 RootTransformation
接口
菜單的行為
new SlidingRootNavBuilder(this)
.withMenuOpened(true) //初始化菜單的狀態(打開/關閉) 默認值 == false
.withMenuLocked(false) //鎖定菜單,true時不能打開或關閉菜單 默認值 == false.
.withGravity(SlideGravity.LEFT) //設置菜單從哪個方向出來,
.withSavedState(savedInstanceState) //是否保存菜單的狀態
.inject();
控制布局
public interface SlidingRootNav {
boolean isMenuHidden();
boolean isMenuLocked();
void closeMenu();
void closeMenu(boolean animated);
void openMenu();
void openMenu(boolean animated);
void setMenuLocked(boolean locked);
SlidingRootNavLayout getLayout(); //If for some reason you need to work directly with layout - you can
}
在調用inject()
后返回的實例,可以控制布局
回調
- 滑動過程的回調
builder.addDragListener(listener);
public interface DragListener {
void onDrag(float progress); //Float between 0 and 1, where 1 is a fully visible menu
}
- 滑動狀態的回調
builder.addDragStateListener(listener);
public interface DragStateListener {
void onDragStart();
void onDragEnd(boolean isMenuOpened);
}
兼容 DrawerLayout.DrawerListener
回調
DrawerListenerAdapter adapter = new DrawerListenerAdapter(yourDrawerListener, viewToPassAsDrawer);
builder.addDragListener(listenerAdapter).addDragStateListener(listenerAdapter);