Android左右滑动菜单

public class MainSlidingMenuView extends FrameLayout {

    private View menuView;
    private View contentView;
    private int mScreenWidth;
    private Scroller mScroller;

    public MainSlidingMenuView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init(context);
    }

    public MainSlidingMenuView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    public MainSlidingMenuView(Context context) {
        super(context);
        init(context);
    }

    private void init(Context context) {
        mScroller = new Scroller(getContext());
        WindowManager windowManager = ((Activity) context).getWindow()
                .getWindowManager();
        Display display = windowManager.getDefaultDisplay();
        mScreenWidth = display.getWidth();
        Loger.e("mScreenWidth = "+mScreenWidth);
    }

    public void setMenuView(View view) {
        LayoutParams lp = new LayoutParams(LayoutParams.FILL_PARENT,
                LayoutParams.FILL_PARENT);
        addView(view, lp);
        menuView = view;
    }

    public void setContentView(View view) {
        LayoutParams lp = new LayoutParams(LayoutParams.FILL_PARENT,
                LayoutParams.FILL_PARENT);
        addView(view, lp);
        contentView = view;
        contentView.bringToFront();
    }

    @Override
    public void scrollTo(int x, int y) {
        super.scrollTo(x, y);
        postInvalidate();
    }

    @Override
    public void computeScroll() {
        if (mScroller.computeScrollOffset()) {
            int oldX = contentView.getScrollX();
            int oldY = contentView.getScrollY();
            int x = mScroller.getCurrX();
            int y = mScroller.getCurrY();
            if (oldX != x || oldY != y) {
                if (contentView != null) {
                    contentView.scrollTo(x, y);
                }
            }
            invalidate();
        }
    }
    

    private void smoothScrollTo(int dx) {
        int duration = 500;
        int oldScrollX = contentView.getScrollX();
        mScroller.startScroll(oldScrollX, contentView.getScrollY(), dx,
                contentView.getScrollY(), duration);
        invalidate();
    }
    
    public boolean isContentViewShow() {
        int scrollX = contentView.getScrollX();
        Loger.e("scrollX = "+scrollX);
        if (scrollX == 0) {
            return true;
        }
        return false;
    }
    
    public boolean isInMenuView(){
        int scrollX = contentView.getScrollX();
        return -mScreenWidth==scrollX;
    }
    
    public boolean isScroling(){
        int scrollX = contentView.getScrollX();
        return scrollX!=0&&scrollX!=-mScreenWidth;
    }

    public final boolean showMenuAnimation = true;
    public void showMenuView() {
        Animation animation = null;
        int oldScrollX = contentView.getScrollX();
        if (oldScrollX == 0) {
//            Log.e("zx","oldScrollX == 0");//fanhui
            menuView.setVisibility(View.VISIBLE);
            smoothScrollTo(-mScreenWidth);
            animation = new TranslateAnimation(-200, 0, 0, 0);
        } else if (oldScrollX == -mScreenWidth) {
            smoothScrollTo(mScreenWidth);
            animation = new TranslateAnimation(0, -200, 0, 0);
        }
        if(!showMenuAnimation) return;
        animation.setDuration(500);
        menuView.startAnimation(animation);
    }

}
 

你可能感兴趣的:(android)