@Override
public boolean onTouchEvent(MotionEvent ev) {
//if user had not set mSwipeItemViewID, not handle any touch event
if(mSwipeItemViewID == -1)
return super.onTouchEvent(ev);
if(mCancelMotionEvent && ev.getAction() == MotionEvent.ACTION_DOWN) {
//ev.setAction(MotionEvent.ACTION_CANCEL);
LogUtil.Log("SwipeListView.onTouchEvent(), cancel ACTION_DOWN");
hideShowingItem();
return true;
} else if(mCancelMotionEvent && ev.getAction() == MotionEvent.ACTION_MOVE) {
if(mSwipeItemView.getCurrentScrollX() > 0) {
mSwipeItemView.computeScroll();
//mSwipeItemView.scrollBy(-1, 0);
}
return true;
} else if(mCancelMotionEvent && ev.getAction() == MotionEvent.ACTION_UP) {
mCancelMotionEvent = false;
return true;
}
switch(ev.getAction()) {
case MotionEvent.ACTION_DOWN: {
LogUtil.Log("ACTION_DOWN");
if(mTracker == null) {
mTracker = VelocityTracker.obtain();
} else {
mTracker.clear();
}
mActionDownX = ev.getX();
mActionDownY = ev.getY();
mLastMotionX = ev.getX();
mLastMotionY = ev.getY();
}break;
case MotionEvent.ACTION_MOVE: {
//if the scroll distance at X-axis or Y-axis less than the
//TOUCH_SLOP, do not handle the event MotionEvent.ACTION_MOVE
if(Math.abs(ev.getX() - mActionDownX) < TOUCH_SLOP
|| Math.abs(ev.getY() - mActionDownY) < TOUCH_SLOP)
break;
float curX = ev.getX();
float curY = ev.getY();
int distanceX = (int)(mLastMotionX - curX);
int distanceY = (int)(mLastMotionY - curY);
if(mScrollDirection == DIRECTION_UNKNOW
&& Math.abs(distanceY) <= Math.abs(distanceX))
mScrollDirection = DIRECTION_HORIZONTAL;
else if(mScrollDirection == DIRECTION_UNKNOW
&& Math.abs(distanceY) > Math.abs(distanceX))
mScrollDirection = DIRECTION_VERTICAL;
//if ListView is scrolling vertical, do not handle the touch event
if(mScrollDirection == DIRECTION_VERTICAL)
break;
int lastPos = pointToPosition((int)mActionDownX, (int)mActionDownY);
int firstVisibleItemPos = getFirstVisiblePosition()
- getHeaderViewsCount();
int factPos = lastPos - firstVisibleItemPos;
mItemView = getChildAt(factPos);
if(mItemView != null) {
mSwipeItemView = (SwipeItemView)mItemView.findViewById(mSwipeItemViewID);
if(mSwipeItemView.getSlidingView() != null
&& mSwipeItemView.getScrollX()
<= mSwipeItemView.getSlidingView().getWidth()
&& mSwipeItemView.getScrollX() >= 0) {
if(mSwipeItemView.getScrollX() + distanceX
> mSwipeItemView.getSlidingView().getWidth())
distanceX = mSwipeItemView.getSlidingView().getWidth()
- mSwipeItemView.getScrollX();
else if(mSwipeItemView.getScrollX() + distanceX < 0)
distanceX = -mSwipeItemView.getScrollX();
mSwipeItemView.scrollBy(distanceX, 0);
}
mLastShowingPos = lastPos;
ev.setAction(MotionEvent.ACTION_CANCEL);
}
mLastMotionX = curX;
mLastMotionY = curY;
}break;
case MotionEvent.ACTION_UP: {
LogUtil.Log("ACTION_UP");
if(mTracker != null) {
mTracker.clear();
mTracker.recycle();
mTracker = null;
}
//reset the mScrollDirection to DIRECTION_UNKNOW
mScrollDirection = DIRECTION_UNKNOW;
//reset the mCancelMotionEvent to false
mCancelMotionEvent = false;
//ensure if the showing item need open or hide
if(mLastShowingPos != -1)
ensureIfItemOpenOrHide();
}break;
case MotionEvent.ACTION_CANCEL: {
hideShowingItem();
}break;
}
return super.onTouchEvent(ev);
}
private void ensureIfItemOpenOrHide() {
if(mLastShowingPos != -1) {
int firstVisibleItemPos = getFirstVisiblePosition()
- getHeaderViewsCount();
int factPos = mLastShowingPos - firstVisibleItemPos;
mItemView = getChildAt(factPos);
if(mItemView != null) {
mSwipeItemView = (SwipeItemView)mItemView.findViewById(mSwipeItemViewID);
if(mSwipeItemView.getSlidingView() != null &&
mSwipeItemView.getScrollX() >=
mSwipeItemView.getSlidingView().getWidth() / 2) {
openShowingItem();
} else if(mSwipeItemView.getSlidingView() != null) {
hideShowingItem();
}
}
}
}
public boolean onInterceptTouchEvent(MotionEvent ev) {
//if user had not set mSwipeItemViewID, not handle any touch event
if(mSwipeItemViewID == -1)
return super.onInterceptTouchEvent(ev);
if(mLastShowingPos != -1
&& ev.getAction() == MotionEvent.ACTION_DOWN
&& !isClickChildView(ev)) {
LogUtil.Log("SwipeListView.onInterceptTouchEvent(), intercept ACTION_DOWN");
mCancelMotionEvent = true;
return true;
} else if(mLastShowingPos == -1
&& ev.getAction() == MotionEvent.ACTION_DOWN) {
return true;
}
return super.onInterceptTouchEvent(ev);
}
private boolean isClickChildView(MotionEvent event) {
if(mLastShowingPos != -1) {
int firstVisibleItemPos = getFirstVisiblePosition()
- getHeaderViewsCount();
int factPos = mLastShowingPos - firstVisibleItemPos;
mItemView = getChildAt(factPos);
if(mItemView != null) {
mSwipeItemView = (SwipeItemView)mItemView.findViewById(mSwipeItemViewID);
View slidingView = mSwipeItemView.getSlidingView();
if(slidingView != null) {
int[] slidingViewLocation = new int[2];
slidingView.getLocationOnScreen(slidingViewLocation);
int left = slidingViewLocation[0];
int right = slidingViewLocation[0] + slidingView.getWidth();
int top = slidingViewLocation[1];
int bottom = slidingViewLocation[1] + slidingView.getHeight();
return (event.getRawX() > left && event.getRawX() < right
&& event.getRawY() > top && event.getRawY() < bottom);
}
}
}
return false;
}
private void openShowingItem() {
if(mLastShowingPos != -1) {
int firstVisibleItemPos = getFirstVisiblePosition()
- getHeaderViewsCount();
int factPos = mLastShowingPos - firstVisibleItemPos;
mItemView = getChildAt(factPos);
if(mItemView != null) {
mSwipeItemView = (SwipeItemView)mItemView.findViewById(mSwipeItemViewID);
if(mSwipeItemView.getSlidingView() != null)
mSwipeItemView.scrollToWithAnimation(
mSwipeItemView.getSlidingView().getWidth(), 0);
}
}
}
private void hideShowingItem() {
if(mLastShowingPos != -1) {
int firstVisibleItemPos = getFirstVisiblePosition()
- getHeaderViewsCount();
int factPos = mLastShowingPos - firstVisibleItemPos;
mItemView = getChildAt(factPos);
if(mItemView != null) {
mSwipeItemView = (SwipeItemView)mItemView.findViewById(mSwipeItemViewID);
mSwipeItemView.scrollToWithAnimation(0, 0);
}
mLastShowingPos = -1;
}
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有