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);
    }

}
 

更多相关文章

  1. 代码中设置drawableleft
  2. android 3.0 隐藏 系统标题栏
  3. Android开发中activity切换动画的实现
  4. Android(安卓)学习 笔记_05. 文件下载
  5. Android中直播视频技术探究之—摄像头Camera视频源数据采集解析
  6. 技术博客汇总
  7. android 2.3 wifi (一)
  8. AndRoid Notification的清空和修改
  9. Android中的Chronometer

随机推荐

  1. Android调用第三方so库
  2. Android异常汇集----4. Android(安卓)req
  3. android学习笔记一:项目目录结构及URI
  4. Android的短信接收类
  5. Android入门笔记 - 网络通信 - HttpClien
  6. Android(安卓)API:Activity.managedQuery(
  7. 查看Android系统内存使用的方法
  8. android activity 切换流程
  9. Android(安卓)应用程序退出的四种方法
  10. 【android】使用部分模拟器出现兼容问题E