JPSpringMenu
Github Project传送门
SpringMenu是一款滑动菜单,类似AndroidResidemenu,SlidingMenu,和其他滑动菜单之间最大的区别是:它提供的灵活性弹跳,结合了Facebook提供的强大动画库Rebound 。说那么多,还是看演示图比较好
Design Sketch(PS技术不够,不清晰掉色)
Usage
Gradle
dependencies {
compile 'com.jpeng:jpspringmenu:$latestVersion'
}
在Activity内初始化Menu
// R.layout.view_menu 是你自定义的Menu View的资源ID
SpringMenu menu = new SpringMenu(this,R.layout.view_menu);
// 为菜单做各种各样的设置...
不要忘记在Activity重写dispatchTouchEvent
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
return menu.dispatchTouchEvent(ev);
}
通过SpringConfig,你可以改变菜单和子布局的弹性速度和力量
// 另一种方式来构建SpringConfig是frombouncinessandspeed
mSpringMenu.setMenuSpringConfig(SpringConfig.fromOrigamiTensionAndFriction(20,3));
mSpringMenu.setChildSpringConfig(SpringConfig.fromOrigamiTensionAndFriction(20, 5));
如果有滑块控件和菜单的一些冲突,你可以试试addignoreview忽略它们
mSpringMenu.addIgnoreView(...);
MenuListener可以用来监听菜单事件的变化,里面有三种回调方法:
//打开后的回调
void onMenuOpen();
//关闭后的回调
void onMenuClose();
/**
* 当菜单正在被打开或者被关闭时,这个方法将会被回调(包含拖动弧度)
* @value: 0f-2f,0f表示菜单关闭,2f则表示打开
* @bouncing: 这个布尔值用来判断菜单是否在反弹状态
* 当处于反弹状态时,这个值无限趋近于2f,否则就是0f
*/
void onProgressUpdate(float value,boolean bouncing);
剩余部分较为重要的Api
// 内容页变暗的效果
setFadeEnable(boolean);
// 允许菜单开始拖动的距离
setDragOffset(float);
setMenuListener(MenuListener);
setDirection(int direction);
About Me
我是在读大三的学生,来自一所非985非211吧,写作不容易,求大神给个star吧
Final
至于菜单弹簧效果实现的原理,稍后再解析!!!
最后感谢AndroidResideMenu这awesome project给了我思路,顺带一句其实这个开源作者是我的...(秘密不能说!)