您的位置:首页 > 移动开发 > Android开发

自定义slideMenu

2016-06-29 21:23 344 查看
public class SlideLayout extends FrameLayout{

private View menuView;
private int menuItemHeight,menuItemWidth;
private Scroller scroller;
private boolean isOpen= false;
public SlideLayout(Context context) {
super(context);
}

public SlideLayout(Context context, AttributeSet attrs) {
super(context, attrs);
scroller = new Scroller(context);
}

public SlideLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}

@Override
protected void onFinishInflate() {
super.onFinishInflate();
menuView = getChildAt(1);
}

@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();

}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
menuItemHeight = menuView.getMeasuredHeight();
menuItemWidth = menuView.getMeasuredWidth();
}

@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
menuView.layout(-menuItemWidth, 0, 0, menuItemHeight);
}

private int lastX=0;
@Override
public boolean onTouchEvent(MotionEvent event) {
int moveX ;
int action = event.getAction();
int eventX = (int) event.getRawX();
switch (action){
case MotionEvent.ACTION_DOWN:
lastX = eventX;
break;
case MotionEvent.ACTION_MOVE:
int dx = eventX-lastX;
moveX = getScrollX()-dx;
if(moveX<-menuItemWidth){
moveX = -menuItemWidth;
}else if(moveX>0){
moveX = 0;
}
scrollTo(moveX,getScrollY());

lastX = eventX;
break;
case MotionEvent.ACTION_UP:
moveX = getScrollX();
if(moveX <= -menuItemWidth/2){
openMenu();
}else{
closeMenu();
}
break;
}

return true;

}

private void closeMenu() {
isOpen = false;
scroller.startScroll(getScrollX(),getScrollY(),-getScrollX(),-getScrollY(),500);
invalidate();
}

private void openMenu() {
isOpen = true;
scroller.startScroll(getScrollX(), getScrollY(), -menuItemWidth - getScrollX(), getScrollY(), 500);
invalidate();

}

@Override
public void computeScroll() {
if(scroller.computeScrollOffset()){
scrollTo(scroller.getCurrX(),scroller.getCurrY());
invalidate();
}
}

public void toggleMenu() {
if(isOpen){
closeMenu();
}else{
openMenu();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息