您的位置:首页 > 移动开发 > Android开发

Android控件之侧滑菜单

2016-10-07 18:01 309 查看

Android控件之侧滑菜单

界面搭建

可以include内嵌一个线性布局,可上下滑动的listView,设置菜单背景,菜单上面的按钮按下和松开的颜色(可以在xml中设置),去掉标题设置Window.FEATURE_NO_TITLE。(可用抽取方式设置成bt_style来快速形成多个button)。

布局测量和摆放规则

在自定义的ViewGroup中,将侧滑菜单放在主界面的左边,指定菜单的宽高(通过measure测量来计算宽高)。

响应用户的触摸事件

onTouchEvent()来响应用户触摸事件来完成菜单和主页面的滑动。

处理触摸事件,不断判断菜单是否超出边界并限定左右边界,调用getScrollX()方法来获取触摸move和down的位置,(downX-moveX)为平滑的距离,调用scrollTo,scrollBy方法来使菜单和主界面实现平滑效果。 计算将要滚动到的位置, 判断是否会超出去, 超出去了.不执行scrollBy。

处理侧滑事件,根据当前滚动到的位置, 和左面板的一半进行比较(getScrollX() < leftCenter),来判定是否打开,切换成菜单面板或主面板。

int leftCenter = (int) (- getChildAt(0).getMeasuredWidth() / 2.0f);
if(getScrollX() < leftCenter){
// 打开, 切换成菜单面板
currentState = MENU_STATE;
updateCurrentContent();
}else {
// 关闭, 切换成主面板
currentState = MAIN_STATE;
updateCurrentContent();
}


并维持动画的继续,完成菜单页面的切换, 并重新绘制界面。

public void computeScroll() {
super.computeScroll();
if(scroller.computeScrollOffset()){ // 直到duration事件以后, 结束
// true, 动画还没有结束
// 获取当前模拟的数字 也就是要滚动到的位置
int currX = scroller.getCurrX();
//System.out.println("currX: " + currX);
scrollTo(currX, 0);
invalidate(); // 重绘界面-> drawChild() -> computeScroll();循环
}
}


添加菜单按钮的点击事件并完善

添加onInterceptTouchEvent()事件,设置菜单按键的move和down事件,并设置斜着的方向超出一定距离时才生效。

代码实现

https://github.com/Threepages/slidingMenu

谢谢观看。

附:github有更好的前辈写的SlidingMenu,地址:

https://github.com/jfeinstein10/SlidingMenu
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 界面 控件