Ejemplo n.º 1
0
 public boolean onSwipe(MotionEvent event) {
   mGestureDetector.onTouchEvent(event);
   switch (event.getAction()) {
     case MotionEvent.ACTION_DOWN:
       mDownX = (int) event.getX();
       isFling = false;
       break;
     case MotionEvent.ACTION_MOVE:
       // Log.i("byz", "downX = " + mDownX + ", moveX = " + event.getX());
       int dis = (int) (mDownX - event.getX());
       if (state == STATE_OPEN) {
         dis += mMenuView.getWidth();
       }
       swipe(dis);
       break;
     case MotionEvent.ACTION_UP:
       if (isFling || (mDownX - event.getX()) > (mMenuView.getWidth() / 2)) {
         // open
         smoothOpenMenu();
       } else {
         // close
         smoothCloseMenu();
         return false;
       }
       break;
   }
   return true;
 }
Ejemplo n.º 2
0
 @Override
 public View getView(int position, View convertView, ViewGroup parent) {
   SwipeMenuLayout layout = null;
   if (convertView == null) {
     View contentView = mAdapter.getView(position, convertView, parent);
     SwipeMenu menu = new SwipeMenu(mContext);
     menu.setViewType(mAdapter.getItemViewType(position));
     createMenu(menu);
     SwipeMenuView menuView = new SwipeMenuView(menu, (SwipeMenuListView) parent);
     menuView.setOnSwipeItemClickListener(this);
     SwipeMenuListView listView = (SwipeMenuListView) parent;
     layout =
         new SwipeMenuLayout(
             contentView,
             menuView,
             listView.getCloseInterpolator(),
             listView.getOpenInterpolator());
     layout.setPosition(position);
   } else {
     layout = (SwipeMenuLayout) convertView;
     layout.closeMenu();
     layout.setPosition(position);
     View view = mAdapter.getView(position, layout.getContentView(), parent);
   }
   return layout;
 }
Ejemplo n.º 3
0
 public void setMenuHeight(int measuredHeight) {
   Log.i("byz", "pos = " + position + ", height = " + measuredHeight);
   LayoutParams params = (LayoutParams) mMenuView.getLayoutParams();
   if (params.height != measuredHeight) {
     params.height = measuredHeight;
     mMenuView.setLayoutParams(mMenuView.getLayoutParams());
   }
 }
 public void smoothOpenMenu() {
   state = STATE_OPEN;
   if (mSwipeDirection == SwipeMenuListView.DIRECTION_LEFT) {
     mOpenScroller.startScroll(-mContentView.getLeft(), 0, mMenuView.getWidth(), 0, 350);
   } else {
     mOpenScroller.startScroll(mContentView.getLeft(), 0, mMenuView.getWidth(), 0, 350);
   }
   postInvalidate();
 }
Ejemplo n.º 5
0
 @Override
 protected void onLayout(boolean changed, int l, int t, int r, int b) {
   mContentView.layout(0, 0, getMeasuredWidth(), mContentView.getMeasuredHeight());
   mMenuView.layout(
       getMeasuredWidth(),
       0,
       getMeasuredWidth() + mMenuView.getMeasuredWidth(),
       mContentView.getMeasuredHeight());
   // setMenuHeight(mContentView.getMeasuredHeight());
   // bringChildToFront(mContentView);
 }
  public void smoothCloseMenu() {
    state = STATE_CLOSE;
    if (mSwipeDirection == SwipeMenuListView.DIRECTION_LEFT) {
      mBaseX = -mContentView.getLeft();
      mCloseScroller.startScroll(0, 0, mMenuView.getWidth(), 0, 350);
    } else {
      mBaseX = mMenuView.getRight();
      mCloseScroller.startScroll(0, 0, mMenuView.getWidth(), 0, 350);
    }

    postInvalidate();
  }
 @Override
 protected void onLayout(boolean changed, int l, int t, int r, int b) {
   mContentView.layout(0, 0, getMeasuredWidth(), mContentView.getMeasuredHeight());
   if (mSwipeDirection == SwipeMenuListView.DIRECTION_LEFT) {
     mMenuView.layout(
         getMeasuredWidth(),
         0,
         getMeasuredWidth() + mMenuView.getMeasuredWidth(),
         mContentView.getMeasuredHeight());
   } else {
     mMenuView.layout(-mMenuView.getMeasuredWidth(), 0, 0, mContentView.getMeasuredHeight());
   }
 }
Ejemplo n.º 8
0
  private void init() {
    setLayoutParams(
        new AbsListView.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
    mGestureListener =
        new SimpleOnGestureListener() {
          @Override
          public boolean onDown(MotionEvent e) {
            isFling = false;
            return true;
          }

          @Override
          public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            // TODO
            if ((e1.getX() - e2.getX()) > MIN_FLING && velocityX < MAX_VELOCITYX) {
              isFling = true;
            }
            // Log.i("byz", MAX_VELOCITYX + ", velocityX = " + velocityX);
            return super.onFling(e1, e2, velocityX, velocityY);
          }
        };
    mGestureDetector = new GestureDetectorCompat(getContext(), mGestureListener);

    // mScroller = ScrollerCompat.create(getContext(), new
    // BounceInterpolator());
    if (mCloseInterpolator != null) {
      mCloseScroller = ScrollerCompat.create(getContext(), mCloseInterpolator);
    } else {
      mCloseScroller = ScrollerCompat.create(getContext());
    }
    if (mOpenInterpolator != null) {
      mOpenScroller = ScrollerCompat.create(getContext(), mOpenInterpolator);
    } else {
      mOpenScroller = ScrollerCompat.create(getContext());
    }

    LayoutParams contentParams =
        new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
    mContentView.setLayoutParams(contentParams);
    if (mContentView.getId() < 1) {
      mContentView.setId(CONTENT_VIEW_ID);
    }

    mMenuView.setId(MENU_VIEW_ID);
    mMenuView.setLayoutParams(
        new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

    addView(mContentView);
    addView(mMenuView);
  }
Ejemplo n.º 9
0
 @Override
 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
   super.onMeasure(widthMeasureSpec, heightMeasureSpec);
   mMenuView.measure(
       MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
       MeasureSpec.makeMeasureSpec(getMeasuredHeight(), MeasureSpec.EXACTLY));
 }
Ejemplo n.º 10
0
 public SwipeMenuLayout(
     View contentView,
     SwipeMenuView menuView,
     Interpolator closeInterpolator,
     Interpolator openInterpolator) {
   super(contentView.getContext());
   mCloseInterpolator = closeInterpolator;
   mOpenInterpolator = openInterpolator;
   mContentView = contentView;
   mMenuView = menuView;
   mMenuView.setLayout(this);
   init();
 }
  private void swipe(int dis) {
    if (Math.signum(dis) != mSwipeDirection) {
      dis = 0;
    } else if (Math.abs(dis) > mMenuView.getWidth()) {
      dis = mMenuView.getWidth() * mSwipeDirection;
    }

    mContentView.layout(
        -dis, mContentView.getTop(), mContentView.getWidth() - dis, getMeasuredHeight());

    if (mSwipeDirection == SwipeMenuListView.DIRECTION_LEFT) {

      mMenuView.layout(
          mContentView.getWidth() - dis,
          mMenuView.getTop(),
          mContentView.getWidth() + mMenuView.getWidth() - dis,
          mMenuView.getBottom());
    } else {
      mMenuView.layout(
          -mMenuView.getWidth() - dis, mMenuView.getTop(), -dis, mMenuView.getBottom());
    }
  }
Ejemplo n.º 12
0
 private void swipe(int dis) {
   if (dis > mMenuView.getWidth()) {
     dis = mMenuView.getWidth();
   }
   if (dis < 0) {
     dis = 0;
   }
   mContentView.layout(
       -dis, mContentView.getTop(), mContentView.getWidth() - dis, getMeasuredHeight());
   mMenuView.layout(
       mContentView.getWidth() - dis,
       mMenuView.getTop(),
       mContentView.getWidth() + mMenuView.getWidth() - dis,
       mMenuView.getBottom());
 }
Ejemplo n.º 13
0
  private void init() {
    setLayoutParams(
        new AbsListView.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
    mGestureListener =
        new SimpleOnGestureListener() {
          @Override
          public boolean onDown(MotionEvent e) {
            isFling = false;
            return true;
          }

          @Override
          public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            // TODO
            if ((e1.getX() - e2.getX()) > MIN_FLING && velocityX < MAX_VELOCITYX) {
              isFling = true;
            }
            // Log.i("byz", MAX_VELOCITYX + ", velocityX = " + velocityX);
            return super.onFling(e1, e2, velocityX, velocityY);
          }
        };
    mGestureDetector = new GestureDetectorCompat(getContext(), mGestureListener);

    // mScroller = ScrollerCompat.create(getContext(), new
    // BounceInterpolator());
    if (mCloseInterpolator != null) {
      mCloseScroller = ScrollerCompat.create(getContext(), mCloseInterpolator);
    } else {
      mCloseScroller = ScrollerCompat.create(getContext());
    }
    if (mOpenInterpolator != null) {
      mOpenScroller = ScrollerCompat.create(getContext(), mOpenInterpolator);
    } else {
      mOpenScroller = ScrollerCompat.create(getContext());
    }

    LayoutParams contentParams =
        new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
    mContentView.setLayoutParams(contentParams);
    if (mContentView.getId() < 1) {
      mContentView.setId(CONTENT_VIEW_ID);
    }

    mMenuView.setId(MENU_VIEW_ID);
    mMenuView.setLayoutParams(
        new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

    addView(mContentView);
    addView(mMenuView);

    // if (mContentView.getBackground() == null) {
    // mContentView.setBackgroundColor(Color.WHITE);
    // }

    // in android 2.x, MenuView height is MATCH_PARENT is not work.
    // getViewTreeObserver().addOnGlobalLayoutListener(
    // new OnGlobalLayoutListener() {
    // @Override
    // public void onGlobalLayout() {
    // setMenuHeight(mContentView.getHeight());
    // // getViewTreeObserver()
    // // .removeGlobalOnLayoutListener(this);
    // }
    // });

  }
Ejemplo n.º 14
0
 public void setPosition(int position) {
   this.position = position;
   mMenuView.setPosition(position);
 }
Ejemplo n.º 15
0
 public void smoothOpenMenu() {
   state = STATE_OPEN;
   mOpenScroller.startScroll(-mContentView.getLeft(), 0, mMenuView.getWidth(), 0, 350);
   postInvalidate();
 }
Ejemplo n.º 16
0
 @Override
 public void onItemClick(SwipeMenuView view, SwipeMenu menu, int index) {
   if (onMenuItemClickListener != null) {
     onMenuItemClickListener.onMenuItemClick(view.getPosition(), menu, index);
   }
 }
Ejemplo n.º 17
0
 public void openMenu() {
   if (state == STATE_CLOSE) {
     state = STATE_OPEN;
     swipe(mMenuView.getWidth());
   }
 }