慕课网大神老师hyman的Android课程:QQ5.0侧滑菜单学习笔记以及总结
一、概述
一般的侧滑实现:
ViewGroup Menu+Content
onTouchEvent监听器可以用来监听手指抬起,点击等事件
MOVE:不断监听用户的移动距离,改变ViewGroup的leftMargin
UP:对用户的操作进行判断,判断是大于一半还是小于一半,若大于则显示菜单,若小于则隐藏菜单(即根据显示菜单的宽度,决定将其隐藏还是显示)
1、Scroller辅助类实现动画效果
2、LeftMargin+Thread
换个思路:继承HorizontalScrollerView(水平滚动条),好处:无需判断高度只需考虑水平宽度,可以省去MOVE冲突的处理。
二、代码实现及自定义属性
(1)布局文件left_menu.xml:
(2)自定义View:SlidingMenu.java,继承水平滚动控件类
1、首先实现其两个参数的构造方法
2、将自定义的HorizontalScrollView名字改成自定义的属性名 包名+类名
(3)写入用户自定义属性,在values文件夹中创建attr.xml文件
(4)在left_menu所在布局文件下设置名称空间:xmlns:自己起的名字="http://schemas.android.com/apk/res-auto"(见demo.xml
)
PS:以上是在Android
Studio中使用自定义名称空间的方法
(5)自定义属性放在View中使用,设置滑动后主界面剩余显示宽度关键:自己起的名字:rightPadding="80dp"(见demo.xml)
(6)在刚才未使用自定义属性时,调用自身的构造方法,定义之后,需要生成另外两个构造方法:将原来两个参数构造方法中的方法拷贝到三个参数的构造方法之中,然后将两个参数构造方法的第三个参数设置为0,将一个参数的构造方法(传入上下文对象方法)的第二个参数设置为null,即调用两个参数的构造方法。
(7)获取我们定义的属性:在三个参数的构造方法中获取:通过TypedArray这个类获得自定义属性,这里需要注意的是TypedArray这个类用完之后需要进行释放(recycled)。
(8)抽屉式菜单实现:
实现思路:将left_menu放置在主界面的下方,并设置一点偏移量,使得侧滑菜单划出时,既像是在下方不动,却又能看到一点点划出的效果
设置调用动画的时机:ACTION_MOVE,划过的距离大于屏幕的1/2时就会将侧滑菜单整个全部拉出,收回同理。
由于属性动画是从Android 3.0开始才引入进来,则我们需要导入一个兼容性jar包nineoldandroids.jar
在SlidingMenu中重写onScrollChanged()方法,具体详见代码实现
三、给侧滑菜单添加按钮,当用户点击时,菜单自动弹出,再点击时自动消失
(1)首先定义一个bool类型的变量标识当前的状态:
Boolean isOpen; //默认打开时为false
(2)菜单划出之后设置为true,未划开为flase
(3)新增打开、关闭、切换菜单方法:openMenu(), closeMenu(), toggle()
(4)left_menu所在的布局文件中添加一个Button或者ImageButton,并添加onClick属性
(5)在相关Activity中设置onClick方法:
private SlidingMenu mLeftMenu;
public void toggleMenu(View view) { mLeftMenu.toggle();
}
具体代码实现:
并不想在此给出:)