您的位置:首页 > 其它

侧滑菜单(SlidingMenu)总结

2016-04-30 23:46 309 查看
首先创建view包,包下创建实现类,然后在实现类中构造两个构造函数,同时初始化布局。接着就在实现类中根据点击与滑动的事件来判断应该做出的操作。

其中的重难点应该就是坐标的选择与判断

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!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: