Android控件之侧滑菜单

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值