最近在项目开发上有一个侧拉菜单的需求,之前想到的会是android官方提供的DrawerLayout,DrawerLayout 为android 2.3 及以上系统版本提供侧拉的功能实现,但在项目中有露出拖拽标签的需求,入下图这样:
这点官方提供的控件似乎并不能满足需求,于是我自己写了个侧拉控件,实现原理与逻辑都十分简单,今天就大家分享一下我基于FrameLayout及ObjectAnimation的侧拉菜单,也算给想要做自订义控件的小伙伴入一下门。 先来看一下侧拉布局的原理图:
控件的使用方法
控件的使用方法
<DrwaerPlusLayout>
<!—中间主体布局-->
<FrameLayout/>
<!—侧拉菜单布局-->
<FrameLayout/>
</ DrwaerPlusLayout>
可以看出来,整个侧拉控件由两个帧布局(FrameLayout)及一个MaskView(就是View, 用于菜单打开时的蒙板效果)组成,实现逻辑(onFinishInflate-> onMeasure-> onLayout->OnTouch()):
- 初始化(onFinishInflate),获取控件的配置参数,得到界面上的两个FrameLayout, 初始化蒙板 View;
- 拿到了我们需要的三个视图后,接下来就是测量(onMeasure),通过onMeasure传递进来的参数,确定控件绘制的宽高,从而确定各个子视图的宽高;
- 布局,确定各个视图的位置,每个视图在中间摆放的位置(这里将侧拉菜单左移或右移出界面一个自身宽度)(控件布局完成);
- 为视图添加事件监听(分析需求:侧拉菜单从左侧拉出,侧拉菜单添加触摸事件监听; 蒙板点击后消失, 蒙板视图添加点击事件监听);
- 处理侧拉逻辑,以及蒙板点击逻辑;
下面是我实现侧拉控件的思路
发现:在对侧拉菜单的使用中发现,一般的侧拉是视图在横轴方向上的的平移
思考: 1. 平移怎么实现