MenuDrawer的使用

时间:2022-02-24 20:02:06

---恢复内容开始---

MenuDrawer框架是一个可以实现上下左右滑动的框架,在使用中可以在xml文件中配置也可以在java代码中实现效果的配置

可以以jar的形式或依赖的形式存在      用依赖的形式存在是方便修改MenuDrawer的源码

在xml中配置

<net.simonvt.menudrawer.OverlayDrawer   //以覆盖的形式出现   即在侧滑时侧滑菜单滑动主界面不会发生改变
        android:id="@+id/drawer"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent
        android:orientation="vertical"
        app:mdContentBackground="@color/interface_background"//  设置内容区的背景银色
        app:mdDrawOverlay="false"      
        app:mdDropShadowColor="#55000000"     //设置阴影部分的颜色
        app:mdDropShadowEnabled="true"    
        app:mdDropShadowSize="5dp"     //设置 阴影部分的长度
        app:mdMenuSize="304dp"        //设置侧滑栏的宽度
        app:mdPosition="right">   //设置是从界面的右边滑出
        <!--304dp-->

代码

mMenuDrawer = MenuDrawer.attach(MainActivity.this,MenuDrawer.Overlay, Position.RIGHT);// 设置出现方式   和位置
        mMenuDrawer.setContentView(R.layout.main_acivity);

mMenuDrawer.setMenuView(R.layout.main_menu);//设置侧滑菜单的布局   这里可以用fragment将布局替换调  替不替换就看你自己的思路
        mMenuDrawer.setTouchMode(MenuDrawer.TOUCH_MODE_NONE);// 设置成不可滑动只可点击出现侧滑菜单     也可以设置其他

这个可以监听点击事件    mMenuDrawer.openMenu();
        mMenuDrawer.setDropShadow(R.drawable.shadow);// 设置阴影 渐变的绘图效果
        mMenuDrawer.setDropShadowSize(10);// 阴影长度
         mMenuDrawer.setMenuSize(size);//设置侧滑菜单出现的宽度
        mMenuDrawer.setMaxAnimationDuration(1000);

//这个方法比较重要
        mMenuDrawer.setOnDrawerStateChangeListener(this);

@Override
    public void onDrawerSlide(float openState, int arg1) {

}

// 状态改变
    @Override
    public void onDrawerStateChange(int outData, int newData) {

}

openState是0.0---1.0的数值变化

当侧滑完全打开时为1.0   完全关闭时0.0

newStatr是int值当完全关闭时为0,打开时为8(没弄明白,这个8是怎样出来的有时间再研究,如果有知道,求解,,,,,,)

在这个方法中我主要使用openState这个值来实现监听效果

例如有个效果  在点击条目时条目整体和侧滑菜单偏移

然后拉动侧滑菜单时整体条目随侧滑菜单来实现联动

这时这个openState值就比较重要了

这里我的实现方式是用到了 scrollBy()和openState值结合来实现的

//在这里比较不好搞定是:

在实现来侧滑并且侧滑时主界面不动的效果时,如果要求主界面和侧滑菜单的  listview都可以滑动且可点击时,这里需要修改下MenuDrawer的源码

(可以将MenuDrawer'作为依赖库    即源码加进来,)

在这里可以发现在MenuDrawer源码中有个  OverlayDrawer.java文件   由于选择的模式是覆盖,又想在覆盖时滑动主界面那么这里提供了修改的方法

在触摸事件判断是否拦截事件的方法  onInterceptTouchEvent(MotionEvent ev) 中的

562行  一般应该就是这行

if (isContentTouch(x, y)) {
                return true;
            }
        }

将这里的true修改为false

if (isContentTouch(x, y)) {
                return false;
            }
        }

即可实现那个比较牛逼的效果来.

完.

---恢复内容结束---