DrawerLayout 实现SlidingMenu侧边栏菜单效果

先看效果图:

![


]6ZLN7KJ6QO.png]( http://upload-images.jianshu.io/upload_images/2787812-3b2f620b063bbf0b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

drawerLayout是Support Library包中实现了侧滑菜单效果的控件,使用起来非常的简单。
1、概述
drawerLayout其实是一个布局控件,跟LinearLayout等控件是一样,但是drawerLayout带有滑动的功能。只要按照drawerLayout的规定布局方式写完布局,就能有侧滑的效果。如下:



 
 




 


写完布局,然后在activity中初始化,根据自己的需求替换内容布局和侧滑布局(不一定用framLayout,可以使用任何其他的布局):

        getSupportFragmentManager().beginTransaction().replace(R.id.fram_context, new ContentFragment()).commit();
        getSupportFragmentManager().beginTransaction().replace(R.id.fram_sliding, new SlidingFragment()).commit();
        // 设置分割线已经滑动方向
        mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow,GravityCompat.START);
        // 禁止手势滑动(使用开关控制)
        mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
        // 添加DrawerListener监听器
        mDrawerLayout.addDrawerListener(new DrawerLayout.DrawerListener() {
            @Override
            public void onDrawerSlide(View drawerView, float slideOffset) {
                // 抽屉改变时使用
                View mContent = mDrawerLayout.getChildAt(0);
                /* 
                 * 当菜单栏滑出时,内容界面随滑动方向平移(模拟SlidingMenu效果) 
                 * ViewHelper为 nineoldandroids.jar中的工具类
                 */
                ViewHelper.setTranslationX(mContent,-fram_sliding.getMeasuredWidth() * slideOffset);
            }

            @Override
            public void onDrawerOpened(View drawerView) {
                // 打开抽侧边栏
                LogUtil.d("DrawerLayout is opened");
            }

            @Override
            public void onDrawerClosed(View drawerView) {
                // 关闭侧边栏
                LogUtil.d("DrawerLayout is closed");
            }

            @Override
            public void onDrawerStateChanged(int newState) {
                // 改变侧边栏的状态
                LogUtil.d("状态改变"+newState);
            }
        });
    }

这里禁止了手势滑动打开关闭侧边栏,使用的是按钮监听控制:

        functionImg.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                if (fram_sliding.isShown()) {
                    //如果侧边栏处于显示状态,关闭侧边栏,否则打开侧边栏
                    mDrawerLayout.closeDrawer(fram_sliding);
                }else {
                    mDrawerLayout.openDrawer(fram_sliding);
                }
            }
        });

这里只实现了右边菜单栏,由于DrawerLayout侧边栏打开时,content布局不会随其平移,为了实现SlidingMenu的效果,加入了nineoldandroids.jar,使用ViewHelper来平移content布局。

你可能感兴趣的:(DrawerLayout 实现SlidingMenu侧边栏菜单效果)