SpringMenu is a sliding menu, similar to AndroidResidemenu, SlidingMenu, The biggest difference between SpringMenu and other menus is that it gives flexibility bouncing, and this project combines the powerful animation elastic library called Rebound provided by Facebook

Design Sketch




dependencies {
    compile 'com.jpeng:jpspringmenu:$latestVersion'

in Activity init

    // R.layout.view_menu is your custom menu Layout resourceId
    SpringMenu menu = new SpringMenu(this,R.layout.view_menu);
    // do something config for menu...

Don't forget to Rewrite dispatchTouchEvent in Activity

    public boolean dispatchTouchEvent(MotionEvent ev) {
         return menu.dispatchTouchEvent(ev);

With SpringConfig, you can change the power and speed of the menu and child layout

    /*Another way to construct SpringConfig is that fromBouncinessAndSpeed
     friction : 2f -4f is the most suitable range,Too small,very fast,flexible.too big,but slow
     friction can not be 0f,If the value is 0, it will bounce back indefinitely,According to the definition of rebound API
    mSpringMenu.setChildSpringConfig(SpringConfig.fromOrigamiTensionAndFriction(20, 5));

If there are some conflicts with slider controls and menus, you can try
addIgnoreView to ignore them


MenuListener can use to listening the menu event,there are three callbacks in it:

    //opened CallBack
    void onMenuOpen();
    //closed CallBack
    void onMenuClose();
     * When the menu is opening or closing,the method will call back(contain dragging arc)
     * @value: 0f-2f,0f indicates that the menu is closed,2f indicates that opening
     * @bouncing: this Boolean value is used to determine whether or not it is in bouncing,
     * when in bouncing,The value is infinitely close to 2f,else is 0f
    void onProgressUpdate(float value,boolean bouncing);

The remaining part of the more important Api

     //Content Page dark effect
     // distance of Allow the menu to begin dragging
     setDirection(int direction);