Android技术分享交流区Android知识Android开发

DrawerLayout 实现SlidingMenu侧边栏菜单效

2016-10-26  本文已影响2659人  曾经的追风少年

先看效果图:

![

0}`JV5)$1762$8DF3K@SPDR.png
]6ZLN7KJ6QO.png](http:https://img.haomeiwen.com/i2787812/3b2f620b063bbf0b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

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

<!-- android:clickable="true"表示侧滑界面可以被点击(当侧滑打开时,拦截频幕的点击事件) -->
<android.support.v4.widget.DrawerLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/drawer_layout"
 android:clickable="true"
 android:layout_width="match_parent"
 android:layout_height="match_parent">
 <!-- Content 内容-->
 <FrameLayout
 android:id="@+id/content_frame_left"
 android:layout_width="match_parent"
 android:layout_height="match_parent" />

<!-- Sliding  Left 左边 -->
<!--<FrameLayout
 android:id="@+id/sliding_frame"
 android:layout_width="200dp"
 android:layout_height="match_parent" />-->

 <!-- Sliding  Right  右边 -->
<FrameLayout
 android:id="@+id/sliding_frame"
 android:layout_width="200dp"
 android:layout_height="match_parent" />
</android.support.v4.widget.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布局。

上一篇下一篇

猜你喜欢

热点阅读