public void SmoothOpenMenu(int position) { if (position >= FirstVisiblePosition && position <= LastVisiblePosition) { View view = GetChildAt(position - FirstVisiblePosition); if (view is SwipeMenuLayout) { mTouchPosition = position; if (mTouchView != null && mTouchView.IsOpen()) { mTouchView.SmoothCloseMenu(); } mTouchView = (SwipeMenuLayout)view; mTouchView.SmoothOpenMenu(); } } }
public override bool OnTouchEvent(MotionEvent e) { if (!(e.Action != MotionEventActions.Down && mTouchView == null)) { switch (e.Action) { case MotionEventActions.Down: { int oldPos = mTouchPosition; mDownX = e.RawX; mDownY = e.RawY; mTouchState = TOUCH_STATE_NONE; mTouchPosition = PointToPosition((int)e.GetX(), (int)e.GetY()); if (mTouchPosition == oldPos && mTouchView != null && mTouchView.IsOpen()) { mTouchState = TOUCH_STATE_X; mTouchView.OnSwipe(e); return(true); } View view = GetChildAt(mTouchPosition - FirstVisiblePosition); if (mTouchView != null && mTouchView.IsOpen()) { mTouchView.SmoothCloseMenu(); mTouchView = null; MotionEvent cancelEvent = MotionEvent.Obtain(e); cancelEvent.Action = MotionEventActions.Cancel; OnTouchEvent(cancelEvent); return(true); } if (view is SwipeMenuLayout) { mTouchView = (SwipeMenuLayout)view; } if (mTouchView != null) { mTouchView.OnSwipe(e); } } break; case MotionEventActions.Move: { float dy = Math.Abs(e.RawY - mDownY); float dx = Math.Abs(e.RawX - mDownX); if (mTouchState == TOUCH_STATE_X) { if (mTouchView != null) { mTouchView.OnSwipe(e); } Selector.SetState(new int[] { 0 }); e.Action = MotionEventActions.Cancel; base.OnTouchEvent(e); return(true); } else if (mTouchState == TOUCH_STATE_NONE) { if (Math.Abs(dy) > MAX_Y) { mTouchState = TOUCH_STATE_Y; } else if (dx > MAX_X) { mTouchState = TOUCH_STATE_X; if (mOnSwipeListener != null) { mOnSwipeListener.OnSwipeStart(mTouchPosition); } } } } break; case MotionEventActions.Up: { if (mTouchState == TOUCH_STATE_X) { mTouchView.OnSwipe(e); if (!mTouchView.IsOpen()) { mTouchPosition = -1; mTouchView = null; } if (mOnSwipeListener != null) { mOnSwipeListener.OnSwipeEnd(mTouchPosition); } e.Action = MotionEventActions.Cancel; base.OnTouchEvent(e); return(true); } } break; } } if (mTouchState != TOUCH_STATE_X) { return((Parent as ViewWrapper).OnTouchEvent(e) || IgnoreTouchEvents || base.OnTouchEvent(e)); } else { return(base.OnTouchEvent(e)); } }