public override 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.ViewType = mAdapter.GetItemViewType(position); CreateMenu(menu); Cooksts.Droid.SWipeMenuList.SwipeListView listview = (Cooksts.Droid.SWipeMenuList.SwipeListView)parent; SwipeMenuView menuView = new SwipeMenuView(menu, listview); menuView.ItemClickListener = this; layout = new SwipeMenuLayout(contentView, menuView, listview.CloseInterpolator, listview.OpenInterpolator); layout.Position = position; } else { layout = (SwipeMenuLayout)convertView; layout.CloseMenu(); layout.Position = position; View view = mAdapter.GetView(position, layout.ContentView, parent); } return(layout); }
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)); //} }