Apache License 2.0

项目介绍

yarolegovich/SlidingRootNav 是一个托管在 GitHub 上的开源项目,主要使用 Java 编写,采用 Apache License 2.0 许可证,目前获得 3.0k 个 Star、442 次 Fork。

仓库全名
yarolegovich/SlidingRootNav
开源许可证
Apache License 2.0
Star 数
3.0k
Fork 数
442
未关闭 Issue
50

README 摘要

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. Gradle Add this into your dependencies block. Sample Please see the sample app for a library usage example. Wiki Usage: 1. Create your contentview.xml (example) or construct a View programatically. 2. Set the…

完整内容见 GitHub 原始 README 或本页 。

常见问题

SlidingRootNav 用什么语言开发?

主要使用 Java 编写,采用 Apache License 2.0 许可证,目前有 3.0k 个 Star。

SlidingRootNav 可以免费商用吗?

仓库采用 Apache License 2.0 许可证,可免费使用与修改,商业使用请遵守许可证条款(例如保留版权声明与许可声明)。

如何获取 SlidingRootNav 的源码?

可以直接克隆仓库:git clone https://github.com/yarolegovich/SlidingRootNav.git,默认分支为 master;安装与运行步骤见仓库 README。

SlidingRootNav 最近还在维护吗?

仓库最近一次更新为 2022年7月22日,当前有 50 个未关闭 Issue;Star 数为 3.0k,可作为社区活跃度的参考。

关于

GitHub 原始描述(英文)

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

描述取自 GitHub 官方 API,保持仓库作者书写的原文。

语言占比

Java

Release

README

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 the sample app for a library usage example.

Wiki

Usage:
  1. Create your content_view.xml (example) or construct a View programatically.
  2. Set the content view (for example, using setContentView in your activity).
  3. Create your menu.xml (example) or construct a View programatically.
  4. Now you need to inject the menu in your onCreate. You can specify transformations of a content view or use the default ones.
new SlidingRootNavBuilder(this)
  .withMenuLayout(R.layout.menu_left_drawer)
  .inject();

API

Transformations

You can specify root transformations using SlidingRootNavBuilder.

new SlidingRootNavBuilder(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();

customTransformation in the above example is a user-created class that implements RootTransformation interface. For an example, refer to the default transformations.

new SlidingRootNavBuilder(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 to inject() returns you an interface for controlling the layout.

public interface SlidingRootNav {
    boolean isMenuClosed();
    boolean isMenuOpened();
    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
}
Callbacks
  • Drag progress:
builder.addDragListener(listener);

public interface DragListener {
  void onDrag(float progress); //Float between 0 and 1, where 1 is a fully visible menu
}

  • Drag state changes:
builder.addDragStateListener(listener);

public interface DragStateListener {
  void onDragStart();
  void onDragEnd(boolean isMenuOpened);
}
  • Compatibility with DrawerLayout.DrawerListener:
DrawerListenerAdapter adapter = new DrawerListenerAdapter(yourDrawerListener, viewToPassAsDrawer);
builder.addDragListener(listenerAdapter).addDragStateListener(listenerAdapter);

Special thanks

Thanks to Tayisiya Yurkiv for 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://www.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.

评论

暂无评论