android.support.v4.view.MotionEventCompat#getActionMasked ( )源码实例Demo

下面列出了android.support.v4.view.MotionEventCompat#getActionMasked ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: IndicatorBox   文件: ParticleHeartView.java
@Override
public boolean onTouch(View v, MotionEvent event) {
    switch(MotionEventCompat.getActionMasked(event)){
        case MotionEvent.ACTION_DOWN:
            if (onClickListener != null) {
                onClickListener.onClick(v);
            }
            startAnimation();
            callOnClick();
            return true;
        case MotionEvent.ACTION_MOVE:
            return true;
        case MotionEvent.ACTION_UP:

            return false;
    }
    return false;
}
 
源代码2 项目: MVVM-JueJin   文件: LoopViewPager.java
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    int action = MotionEventCompat.getActionMasked(ev);
    if (stopScrollWhenTouch) {
        if ((action == MotionEvent.ACTION_DOWN)) {
            if (mOnTouchListening!=null){
                mOnTouchListening.onTouchCancleTimer(true);
            }
        } else if (ev.getAction() == MotionEvent.ACTION_UP ) {
            if (mOnTouchListening!=null){
                mOnTouchListening.onTouchCancleTimer(false);
            }
        }
    }
    return super.dispatchTouchEvent(ev);
}
 
源代码3 项目: DrawableView   文件: GestureCreator.java
public void onTouchEvent(MotionEvent event) {
  float touchX = (MotionEventCompat.getX(event, 0) + viewRect.left) / scaleFactor;
  float touchY = (MotionEventCompat.getY(event, 0) + viewRect.top) / scaleFactor;

  //Log.d("Drawer", "T[" + touchX + "," + touchY + "] V[" + viewRect.toShortString() + "] S[" + scaleFactor + "]");
  switch (MotionEventCompat.getActionMasked(event)) {
    case MotionEvent.ACTION_DOWN:
      actionDown(touchX, touchY);
      break;
    case MotionEvent.ACTION_MOVE:
      actionMove(touchX, touchY);
      break;
    case MotionEvent.ACTION_UP:
      actionUp();
      break;
    case MotionEventCompat.ACTION_POINTER_DOWN:
      actionPointerDown();
      break;
  }
}
 
源代码4 项目: AutoRecycleView   文件: SuperSwipeRefreshLayout.java
@Override
public boolean onTouchEvent(MotionEvent ev) {
    final int action = MotionEventCompat.getActionMasked(ev);

    if (mReturningToStart && action == MotionEvent.ACTION_DOWN) {
        mReturningToStart = false;
    }
    if (!isEnabled() || mReturningToStart
            || (!isChildScrollToTop() && !isChildScrollToBottom())) {
        // 如果子View可以滑动,不拦截事件,交给子View处理
        return false;
    }

    if (isChildScrollToBottom()) {
        // 上拉加载更多
        return handlerPushTouchEvent(ev, action);
    } else {
        // 下拉刷新
        return handlerPullTouchEvent(ev, action);
    }
}
 
源代码5 项目: MeiZiNews   文件: VerticalDrawerLayout.java
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
    boolean interceptForDrag = mDragHelper.shouldInterceptTouchEvent(ev);
    boolean interceptForTap = false;

    final int action = MotionEventCompat.getActionMasked(ev);
    switch (action) {
        case MotionEvent.ACTION_DOWN: {
            final float x = ev.getX();
            final float y = ev.getY();

            final View touchedView = mDragHelper.findTopChildUnder((int) x, (int) y);
            if (isContentView(touchedView)) {
                if (mContentScrimOpacity > 0) {
                    interceptForTap = true;
                }
            }

            break;
        }
    }


    return interceptForDrag || interceptForTap;
}
 
@Override
public boolean onTouchEvent(MotionEvent event) {
    if (mContextView != null && mContextView.getVisibility() == VISIBLE) {
        return false;
    }
    int action = MotionEventCompat.getActionMasked(event);

    if (action == MotionEvent.ACTION_DOWN) {
        if (event.getX() < getPaddingLeft() + mIndicatorWidth * 3) {
            mDownPositionX = event.getX();
            return true;
        }
    } else if (action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP) {
        if (mAnimationView != null && event.getX() - mDownPositionX > getWidth() / 10 && mAnimationView.getVisibility() != VISIBLE) {
            startViewAnimation(mDefaultShowAnimator);
            return true;
        }
    }
    return super.onTouchEvent(event);
}
 
源代码7 项目: android-recipes-app   文件: AutoScrollHelper.java
/**
 * Handles touch events by activating automatic scrolling, adjusting scroll
 * velocity, or stopping.
 * <p>
 * If {@link #isExclusive()} is false, always returns false so that
 * the host view may handle touch events. Otherwise, returns true when
 * automatic scrolling is active and false otherwise.
 */
@Override
public boolean onTouch(View v, MotionEvent event) {
    if (!mEnabled) {
        return false;
    }

    final int action = MotionEventCompat.getActionMasked(event);
    switch (action) {
        case MotionEvent.ACTION_DOWN:
            mNeedsCancel = true;
            mAlreadyDelayed = false;
            // $FALL-THROUGH$
        case MotionEvent.ACTION_MOVE:
            final float xTargetVelocity = computeTargetVelocity(
                    HORIZONTAL, event.getX(), v.getWidth(), mTarget.getWidth());
            final float yTargetVelocity = computeTargetVelocity(
                    VERTICAL, event.getY(), v.getHeight(), mTarget.getHeight());
            mScroller.setTargetVelocity(xTargetVelocity, yTargetVelocity);

            // If the auto scroller was not previously active, but it should
            // be, then update the state and start animations.
            if (!mAnimating && shouldAnimate()) {
                startAnimating();
            }
            break;
        case MotionEvent.ACTION_UP:
        case MotionEvent.ACTION_CANCEL:
            requestStop();
            break;
    }

    return mExclusive && mAnimating;
}
 
@Override
public boolean onTouchEvent(MotionEvent event) {
    if (!mInputEnabled) {
        return true;
    }

    final int action = MotionEventCompat.getActionMasked(event);
    if (action == MotionEvent.ACTION_MOVE
            || action == MotionEvent.ACTION_UP
            || action == MotionEvent.ACTION_DOWN) {
        boolean forceSelection = false;
        boolean autoAdvance = false;

        if (action == MotionEvent.ACTION_DOWN) {
            // This is a new event stream, reset whether the value changed.
            mChangedDuringTouch = false;
        } else if (action == MotionEvent.ACTION_UP) {
            autoAdvance = true;

            // If we saw a down/up pair without the value changing, assume
            // this is a single-tap selection and force a change.
            if (!mChangedDuringTouch) {
                forceSelection = true;
            }
        }

        mChangedDuringTouch |= handleTouchInput(
                event.getX(), event.getY(), forceSelection, autoAdvance);
    }

    return true;
}
 
源代码9 项目: Bailan   文件: PullToRefreshView.java
@Override
public boolean onTouchEvent(MotionEvent ev) {
    final int action = MotionEventCompat.getActionMasked(ev);

    switch (action) {
        case MotionEvent.ACTION_DOWN:
            return true;
        case MotionEvent.ACTION_MOVE:
            if (!isPullDownEnable && deltaY > 0 && getScrollY() <= 0) {
                break;
            }

            if (!isPullUpEnable && deltaY < 0 && getScrollY() >= 0) {
                break;
            }

            if (isNeedIntercept) {
                if (mStatus == PULL_DOWN && getScrollY() > 0) {
                    break;
                }
                if (mStatus == PULL_UP && getScrollY() < 0) {
                    break;
                }
                scrollBy(0, (int) (-getMoveFloat(yVelocity, deltaY)));

                updateIndicator();
            } else {
                ev.setAction(MotionEvent.ACTION_DOWN);
                dispatchTouchEvent(ev);
                isInControl = false;
            }
            break;
        case MotionEvent.ACTION_UP:
            autoBackToPosition();
            return true;
    }

    return true;
}
 
源代码10 项目: mirror   文件: DottedGridView.java
/**
 * Override method to intercept only touch events over the drag view and to cancel the drag when
 * the action associated to the MotionEvent is equals to ACTION_CANCEL or ACTION_UP.
 *
 * @param ev captured.
 * @return true if the view is going to process the touch event or false if not.
 */
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
    if (!isEnabled()) {
        return false;
    }

    mDraggedView = null;
    stream(mViews)
            .filter(v -> isViewHit(v, (int) ev.getX(), (int) ev.getY()))
            .forEach((Action1<BorderView>) v -> mDraggedView = v);

    final int actionMasked = MotionEventCompat.getActionMasked(ev);
    switch (actionMasked & MotionEventCompat.ACTION_MASK) {
        case MotionEvent.ACTION_CANCEL:
        case MotionEvent.ACTION_UP:
            hideDraggedViewBorder();
            mViewDragHelper.cancel();
            return false;
        case MotionEvent.ACTION_DOWN:
            showDraggedViewBorder();
            mViewDragHelper.processTouchEvent(ev);
            return false;
        default:
            break;
    }
    return mViewDragHelper.shouldInterceptTouchEvent(ev) ||
            mViewDragHelper.isViewUnder(mDraggedView, (int) ev.getX(), (int) ev.getY());
}
 
@Override
public boolean onTouch(View v, MotionEvent event) {

    final int action = MotionEventCompat.getActionMasked(event);
    switch (action) {
        case MotionEvent.ACTION_UP:
        case MotionEvent.ACTION_CANCEL:
            return false;
    }

    return super.onTouch(v,event);
}
 
源代码12 项目: ToolbarPanel   文件: ToolbarPanelLayout.java
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
    final int action = MotionEventCompat.getActionMasked(ev);
    if (action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP) {
        dragHelper.cancel();
        return false;
    }
    return dragHelper.shouldInterceptTouchEvent(ev);
}
 
源代码13 项目: Auie   文件: UIListView.java
@SuppressLint("ClickableViewAccessibility")
@Override
public boolean onTouchEvent(MotionEvent ev) {
	if (ev.getAction() != MotionEvent.ACTION_DOWN && mTouchView == null){
		return super.onTouchEvent(ev);			
	}
	int action = MotionEventCompat.getActionMasked(ev);
	action = ev.getAction();
	switch (action) {
	case MotionEvent.ACTION_DOWN:
		int oldPos = mTouchPosition;
		lastY = ev.getRawY();
		pressX = ev.getX();
		pressY = ev.getY();
		mTouchState = TOUCH_STATE_NONE;
		mTouchPosition = pointToPosition((int) ev.getX(), (int) ev.getY());
		if (mTouchPosition == oldPos && mTouchView != null && mTouchView.isShow()) {
			mTouchState = TOUCH_STATE_X;
			mTouchView.onSwipe(ev);
			return true;
		}

		View view = getChildAt(mTouchPosition - getFirstVisiblePosition());

		if (mTouchView != null && mTouchView.isShow()) {
			mTouchView.smoothCloseMenu();
			mTouchView = null;
			return super.onTouchEvent(ev);
		}
		if (view instanceof MenuLayout) {
			mTouchView = (MenuLayout) view;
		}
		if (mTouchView != null) {
			mTouchView.onSwipe(ev);
		}
		break;
	case MotionEvent.ACTION_MOVE:
		float dy = Math.abs((ev.getY() - pressY));
		float dx = Math.abs((ev.getX() - pressX));
		if (mTouchState == TOUCH_STATE_X) {
			if (mTouchView != null) {
				mTouchView.onSwipe(ev);
			}
			getSelector().setState(new int[] { 0 });
			ev.setAction(MotionEvent.ACTION_CANCEL);
			super.onTouchEvent(ev);
			return true;
		} else if (mTouchState == TOUCH_STATE_NONE) {
			if (Math.abs(dy) > DISTANCE_Y) {
				mTouchState = TOUCH_STATE_Y;
			} else if (dx > DISTANCE_X) {
				mTouchState = TOUCH_STATE_X;
			}
		}
		final float deltaY = ev.getRawY() - lastY;
		lastY = ev.getRawY();
		if (isCanRefresh() && getFirstVisiblePosition() == 0 && (headerView.getVisiableHeight() > 0 || deltaY > 0)) {
			updateHeaderHeight(deltaY / OFFSET_RADIO);
			invokeOnScrolling();
		} else if (isCanLoadmore() && getLastVisiblePosition() == totalItemCount - 1 && (footerView.getBottomMargin() > 0 || deltaY < 0)) {
			updateFooterHeight(-deltaY / OFFSET_RADIO);
		}
		break;
	case MotionEvent.ACTION_UP:
	default:
		if (mTouchState == TOUCH_STATE_X) {
			onTouchHorizontal(ev);
			ev.setAction(MotionEvent.ACTION_CANCEL);
			super.onTouchEvent(ev);
			return true;
		}
		if (getFirstVisiblePosition() == 0) {
			if (isCanRefresh() && headerView.getVisiableHeight() > headerViewHeight) {
				refreshing = true;
				headerView.setState(HeaderView.STATE_REFRESHING);
				if (listViewListener != null) {
					listViewListener.onRefresh();
				}
			}
			resetHeaderHeight();
		}
		if (isCanLoadmore() && getLastVisiblePosition() == totalItemCount - 1) {
			if ((type == TYPE_ONLY_UP_LOADMORD || type == TYPE_BOTH) && footerView.getBottomMargin() > PULL_LOAD_MORE_DELTA) {
				startLoadMore();
			}
			resetFooterHeight();
		}
		break;
	}
	return super.onTouchEvent(ev);
}
 
private boolean detectNestedScroll(MotionEvent e) {
    final MotionEvent vtev = MotionEvent.obtain(e);
    final int action = MotionEventCompat.getActionMasked(e);
    final int actionIndex = MotionEventCompat.getActionIndex(e);

    if (action == MotionEvent.ACTION_DOWN) {
        mNestedOffsets[0] = mNestedOffsets[1] = 0;
    }
    vtev.offsetLocation(mNestedOffsets[0], mNestedOffsets[1]);

    switch (action) {
        case MotionEvent.ACTION_DOWN:
            mActivePointerId = e.getPointerId(0);
            mLastTouchX = (int) e.getX();
            mLastTouchY = (int) e.getY();
            startNestedScroll(ViewCompat.SCROLL_AXIS_VERTICAL);
            break;
        case MotionEventCompat.ACTION_POINTER_DOWN:
            mActivePointerId = e.getPointerId(actionIndex);
            mLastTouchX = (int) e.getX(actionIndex);
            mLastTouchY = (int) e.getY(actionIndex);
            break;
        case MotionEvent.ACTION_MOVE:
            final int index = e.findPointerIndex(mActivePointerId);
            if (index < 0) {
                Log.e("TwinklingRefreshLayout", "Error processing scroll; pointer index for id " +
                        mActivePointerId + " not found. Did any MotionEvents get skipped?");
                return false;
            }

            final int x = (int) e.getX(index);
            final int y = (int) e.getY(index);

            int dx = mLastTouchX - x;
            int dy = mLastTouchY - y;

            if (dispatchNestedPreScroll(dx, dy, mScrollConsumed, mScrollOffset)) {
                dx -= mScrollConsumed[0];
                dy -= mScrollConsumed[1];
                vtev.offsetLocation(mScrollOffset[0], mScrollOffset[1]);
                // Updated the nested offsets
                mNestedOffsets[0] += mScrollOffset[0];
                mNestedOffsets[1] += mScrollOffset[1];
            }

            if (!mIsBeingDragged && Math.abs(dy) > mTouchSlop) {
                final ViewParent parent = getParent();
                if (parent != null) {
                    parent.requestDisallowInterceptTouchEvent(true);
                }
                mIsBeingDragged = true;
                if (dy > 0) {
                    dy -= mTouchSlop;
                } else {
                    dy += mTouchSlop;
                }
            }

            if (mIsBeingDragged) {
                mLastTouchY = y - mScrollOffset[1];

                final int scrolledDeltaY = 0;
                final int unconsumedY = dy - scrolledDeltaY;
                if (dispatchNestedScroll(0, scrolledDeltaY, 0, unconsumedY, mScrollOffset)) {
                    mLastTouchX -= mScrollOffset[0];
                    mLastTouchY -= mScrollOffset[1];
                    vtev.offsetLocation(mScrollOffset[0], mScrollOffset[1]);
                    mNestedOffsets[0] += mScrollOffset[0];
                    mNestedOffsets[1] += mScrollOffset[1];
                }
            }
            break;
        case MotionEvent.ACTION_UP:
        case MotionEvent.ACTION_CANCEL:
            stopNestedScroll();
            mIsBeingDragged = false;
            mActivePointerId = INVALID_POINTER;
            break;
    }
    vtev.recycle();
    return true;
}
 
源代码15 项目: DatePicker   文件: NumberPicker.java
@Override
public boolean onTouchEvent(MotionEvent event) {
    if (!isEnabled()) {
        return false;
    }
    if (mVelocityTracker == null) {
        mVelocityTracker = VelocityTracker.obtain();
    }
    mVelocityTracker.addMovement(event);

    int action = MotionEventCompat.getActionMasked(event);
    mTouchAction = action;
    if (MotionEvent.ACTION_DOWN == action) {
        getParent().requestDisallowInterceptTouchEvent(true);
        mStartY = (int) event.getY();
        if (!mFlingScroller.isFinished() || !mAdjustScroller.isFinished()) {
            mFlingScroller.forceFinished(true);
            mAdjustScroller.forceFinished(true);
            onScrollStateChange(OnScrollListener.SCROLL_STATE_IDLE);
        }
    } else if (MotionEvent.ACTION_MOVE == action) {
        mCurrY = (int) event.getY();
        mOffectY = mCurrY - mStartY;

        if (!mCanScroll && Math.abs(mOffectY) < mTouchSlop) {
            return false;
        } else {
            mCanScroll = true;
            if (mOffectY > mTouchSlop) {
                mOffectY -= mTouchSlop;
            } else if (mOffectY < -mTouchSlop) {
                mOffectY += mTouchSlop;
            }
        }

        mStartY = mCurrY;

        computeYPos(mOffectY);

        onScrollStateChange(OnScrollListener.SCROLL_STATE_TOUCH_SCROLL);
        invalidate();
    } else if (MotionEvent.ACTION_UP == action) {
        mCanScroll = false;

        VelocityTracker velocityTracker = mVelocityTracker;
        velocityTracker.computeCurrentVelocity(1000, mMaximumFlingVelocity);
        int initialVelocity = (int) velocityTracker.getYVelocity();

        if (Math.abs(initialVelocity) > mMinimumFlingVelocity) {
            fling(initialVelocity);
            onScrollStateChange(OnScrollListener.SCROLL_STATE_FLING);
        } else {
            adjustYPosition();
            invalidate();
        }
        mVelocityTracker.recycle();
        mVelocityTracker = null;
    }

    return true;
}
 
源代码16 项目: AntennaPodSP   文件: SlidingUpPanelLayout.java
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
    final int action = MotionEventCompat.getActionMasked(ev);

    if (!mCanSlide || !mIsSlidingEnabled || (mIsUnableToDrag && action != MotionEvent.ACTION_DOWN)) {
        mDragHelper.cancel();
        return super.onInterceptTouchEvent(ev);
    }

    if (action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP) {
        mDragHelper.cancel();
        return false;
    }

    final float x = ev.getX();
    final float y = ev.getY();
    boolean interceptTap = false;

    switch (action) {
        case MotionEvent.ACTION_DOWN: {
            mIsUnableToDrag = false;
            mInitialMotionX = x;
            mInitialMotionY = y;
            if (isDragViewUnder((int) x, (int) y) && !mIsUsingDragViewTouchEvents) {
                interceptTap = true;
            }
            break;
        }

        case MotionEvent.ACTION_MOVE: {
            final float adx = Math.abs(x - mInitialMotionX);
            final float ady = Math.abs(y - mInitialMotionY);
            final int dragSlop = mDragHelper.getTouchSlop();

            // Handle any horizontal scrolling on the drag view.
            if (mIsUsingDragViewTouchEvents) {
                if (adx > mScrollTouchSlop && ady < mScrollTouchSlop) {
                    return super.onInterceptTouchEvent(ev);
                }
                // Intercept the touch if the drag view has any vertical scroll.
                // onTouchEvent will determine if the view should drag vertically.
                else if (ady > mScrollTouchSlop) {
                    interceptTap = isDragViewUnder((int) x, (int) y);
                }
            }

            if ((ady > dragSlop && adx > ady) || !isDragViewUnder((int) x, (int) y)) {
                mDragHelper.cancel();
                mIsUnableToDrag = true;
                return false;
            }
            break;
        }
    }

    final boolean interceptForDrag = mDragHelper.shouldInterceptTouchEvent(ev);

    return interceptForDrag || interceptTap;
}
 
源代码17 项目: letv   文件: ItemTouchHelper.java
public void onTouchEvent(RecyclerView recyclerView, MotionEvent event) {
    int newPointerIndex = 0;
    ItemTouchHelper.this.mGestureDetector.onTouchEvent(event);
    if (ItemTouchHelper.this.mVelocityTracker != null) {
        ItemTouchHelper.this.mVelocityTracker.addMovement(event);
    }
    if (ItemTouchHelper.this.mActivePointerId != -1) {
        int action = MotionEventCompat.getActionMasked(event);
        int activePointerIndex = MotionEventCompat.findPointerIndex(event, ItemTouchHelper.this.mActivePointerId);
        if (activePointerIndex >= 0) {
            ItemTouchHelper.this.checkSelectForSwipe(action, event, activePointerIndex);
        }
        ViewHolder viewHolder = ItemTouchHelper.this.mSelected;
        if (viewHolder != null) {
            switch (action) {
                case 1:
                    break;
                case 2:
                    if (activePointerIndex >= 0) {
                        ItemTouchHelper.this.updateDxDy(event, ItemTouchHelper.this.mSelectedFlags, activePointerIndex);
                        ItemTouchHelper.this.moveIfNecessary(viewHolder);
                        ItemTouchHelper.this.mRecyclerView.removeCallbacks(ItemTouchHelper.this.mScrollRunnable);
                        ItemTouchHelper.this.mScrollRunnable.run();
                        ItemTouchHelper.this.mRecyclerView.invalidate();
                        return;
                    }
                    return;
                case 3:
                    if (ItemTouchHelper.this.mVelocityTracker != null) {
                        ItemTouchHelper.this.mVelocityTracker.clear();
                        break;
                    }
                    break;
                case 6:
                    int pointerIndex = MotionEventCompat.getActionIndex(event);
                    if (MotionEventCompat.getPointerId(event, pointerIndex) == ItemTouchHelper.this.mActivePointerId) {
                        if (pointerIndex == 0) {
                            newPointerIndex = 1;
                        }
                        ItemTouchHelper.this.mActivePointerId = MotionEventCompat.getPointerId(event, newPointerIndex);
                        ItemTouchHelper.this.updateDxDy(event, ItemTouchHelper.this.mSelectedFlags, pointerIndex);
                        return;
                    }
                    return;
                default:
                    return;
            }
            ItemTouchHelper.this.select(null, 0);
            ItemTouchHelper.this.mActivePointerId = -1;
        }
    }
}
 
源代码18 项目: OmniList   文件: SlidingUpPanelLayout.java
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
    final int action = MotionEventCompat.getActionMasked(ev);


    if (!isEnabled() || !mIsSlidingEnabled || (mIsUnableToDrag && action != MotionEvent.ACTION_DOWN)) {
        mDragHelper.cancel();
        return super.onInterceptTouchEvent(ev);
    }

    if (action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP) {
        mDragHelper.cancel();
        return false;
    }

    final float x = ev.getX();
    final float y = ev.getY();

    switch (action) {
        case MotionEvent.ACTION_DOWN: {
            mIsUnableToDrag = false;
            mInitialMotionX = x;
            mInitialMotionY = y;
            break;
        }

        case MotionEvent.ACTION_MOVE: {
            final float adx = Math.abs(x - mInitialMotionX);
            final float ady = Math.abs(y - mInitialMotionY);
            final int dragSlop = mDragHelper.getTouchSlop();

            // Handle any horizontal scrolling on the drag view.
            if (mIsUsingDragViewTouchEvents && adx > dragSlop && ady < dragSlop) {
                return super.onInterceptTouchEvent(ev);
            }

            if ((ady > dragSlop && adx > ady) || !isDragViewUnder((int) mInitialMotionX, (int) mInitialMotionY)) {
                mDragHelper.cancel();
                mIsUnableToDrag = true;
                return false;
            }
            break;
        }
    }

    return mDragHelper.shouldInterceptTouchEvent(ev);
}
 
源代码19 项目: PullToRefresh   文件: PullToRefreshView.java
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
    if (!isEnabled() || canChildScrollUp() || mRefreshing)
        return false;

    final int action = MotionEventCompat.getActionMasked(ev);

    switch (action) {
        case MotionEvent.ACTION_DOWN:
            setTargetOffsetTop(0, true);
            mActivePointerId = MotionEventCompat.getPointerId(ev, 0);
            mIsBeingDragged = false;
            final float initialMotionY = getMotionEventY(ev, mActivePointerId);
            if (initialMotionY == -1)
                return false;
            mInitialMotionY = initialMotionY;
            break;
        case MotionEvent.ACTION_MOVE:
            if (mActivePointerId == INVALID_POINTER)
                return false;

            final float y = getMotionEventY(ev, mActivePointerId);
            if (-1 == y)
                return false;
            final float yDiff = y - mInitialMotionY;
            if (yDiff > mTouchSlop && !mIsBeingDragged)
                mIsBeingDragged = true;
            break;
        case MotionEvent.ACTION_UP:
        case MotionEvent.ACTION_CANCEL:
            mIsBeingDragged = false;
            mActivePointerId = INVALID_POINTER;
            break;
        case MotionEvent.ACTION_POINTER_UP:
            onSecondaryPointerUp(ev);
            break;

    }

    return mIsBeingDragged;
}
 
源代码20 项目: fangzhuishushenqi   文件: SwipeRefreshLayout.java
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
    ensureTarget();

    final int action = MotionEventCompat.getActionMasked(ev);
    if (mReturningToStart && action == MotionEvent.ACTION_DOWN) {
        mReturningToStart = false;
    }
    if (!isEnabled() || mReturningToStart || canChildScrollUp() || mRefreshing) {
        // Fail fast if we're not in a state where a swipe is possible
        return false;
    }
    switch (action) {
        case MotionEvent.ACTION_DOWN:
            setTargetOffsetTopAndBottom(mOriginalOffsetTop - mCircleView.getTop(), true);
            mActivePointerId = MotionEventCompat.getPointerId(ev, 0);
            mIsBeingDragged = false;
            final float initialDownY = getMotionEventY(ev, mActivePointerId);
            if (initialDownY == -1) {
                return false;
            }
            mInitialDownY = initialDownY;
            break;

        case MotionEvent.ACTION_MOVE:
            if (mActivePointerId == INVALID_POINTER) {
                Log.e(LOG_TAG, "Got ACTION_MOVE event but don't have an active pointer id.");
                return false;
            }

            final float y = getMotionEventY(ev, mActivePointerId);
            if (y == -1) {
                return false;
            }
            final float yDiff = y - mInitialDownY;
            if (yDiff > mTouchSlop && !mIsBeingDragged) {
                mInitialMotionY = mInitialDownY + mTouchSlop;
                mIsBeingDragged = true;
                mProgress.setAlpha(STARTING_PROGRESS_ALPHA);
            }
            break;

        case MotionEventCompat.ACTION_POINTER_UP:
            onSecondaryPointerUp(ev);
            break;

        case MotionEvent.ACTION_UP:
        case MotionEvent.ACTION_CANCEL:
            mIsBeingDragged = false;
            mActivePointerId = INVALID_POINTER;
            break;
    }
    return mIsBeingDragged;
}