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();
}
}
}
自定义slideMenu
最新推荐文章于 2024-07-25 20:49:13 发布