侧滑菜单(SlidingMenu)总结
2016-04-30 23:46
309 查看
首先创建view包,包下创建实现类,然后在实现类中构造两个构造函数,同时初始化布局。接着就在实现类中根据点击与滑动的事件来判断应该做出的操作。
其中的重难点应该就是坐标的选择与判断
Scroller中的invalidate()方法是由于Scroller不能去调用srollTo()这个方法,而invalidate()可以通过computeScroll()方法去调用
顶部栏的点击滑出侧滑菜单也是通过判断坐标来实现的,
over!
其中的重难点应该就是坐标的选择与判断
MotionEvent.ACTION_DOWN获取摁下时的坐标
MotionEvent.ACTION_MOVE获取移动的距离(用移动的坐标减去摁下时的坐标)
MotionEvent.ACTION_UP根据抬起时执行相应的操作,这里有两种方法实现:
使用自定义动画
创建一个类继承Animation并构造出一个构造方法传入两个参数,第一个参数是view,第二个参数是目标的位置,根据滑动的宽度与侧滑菜单宽度的一半来判断是否打开侧滑菜单ScrollAnimation scrollAnimation; if(getScrollX()>-menuWidth/2){//关闭菜单 scrollTo(0, 0); scrollAnimation = new ScrollAnimation(this, 0); } else {//打开菜单 scrollTo(-menuWidth, 0); scrollAnimation = new ScrollAnimation(this, -menuWidth); } startAnimation(scrollAnimation);
使用Scroller
也是根据坐标来判断是否打开或关闭侧滑菜单private void closeMenu(){ scroller.startScroll(getScrollX(), 0, 0-getScrollX(), 0, 400); invalidate();//界面重绘操作 } private void openMenu(){ scroller.startScroll(getScrollX(), 0, -menuWidth-getScrollX(), 0, 400); invalidate(); }
Scroller中的invalidate()方法是由于Scroller不能去调用srollTo()这个方法,而invalidate()可以通过computeScroll()方法去调用
public void computeScroll() { super.computeScroll(); if(scroller.computeScrollOffset()){//返回true,表示动画没结束 scrollTo(scroller.getCurrX(), 0); invalidate(); } }
顶部栏的点击滑出侧滑菜单也是通过判断坐标来实现的,
getScrollX()==0则显示主菜单,否则显示侧滑菜单
over!
相关文章推荐
- Sublime Text 3 快捷键
- tika in action之1.1(理解数字文件)
- 36-Same Tree
- iOS边练边学--NSURLSession、NSURLSessionTask的介绍与使用以及url中包含了中文的处理方法
- Beyond Compare实用发布功能
- Intent和Bundle传递数据
- 两次点击退出
- 鼠标单击到 img行的时候图片隐藏方案
- Java多线程编程(一)
- 基础篇 _练习 小练习5~14
- 用CInternetSession实现HTTP POST登录
- Redis "MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk"问题的解决
- ContentProvider
- 请实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构
- 论加多宝的品牌重塑
- 将字符串转换为整数
- C++中的重载 覆盖 隐藏的规律
- java中的中断控制 break和continue
- UFLDL 06 PCA 主成分分析法
- android第一行代码-3.activity之间的调用跟数据传递