android.view.MotionEvent#ACTION_CANCEL源码实例Demo

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

源代码1 项目: sealtalk-android   文件: HorizontalListView.java
@Override
public boolean onTouchEvent(MotionEvent event) {
    // Detect when the user lifts their finger off the screen after a touch
    if (event.getAction() == MotionEvent.ACTION_UP) {
        // If not flinging then we are idle now. The user just finished a finger scroll.
        if (mFlingTracker == null || mFlingTracker.isFinished()) {
            setCurrentScrollState(OnScrollStateChangedListener.ScrollState.SCROLL_STATE_IDLE);
        }

        // Allow the user to interact with parent views
        requestParentListViewToNotInterceptTouchEvents(false);

        releaseEdgeGlow();
    } else if (event.getAction() == MotionEvent.ACTION_CANCEL) {
        unpressTouchedChild();
        releaseEdgeGlow();

        // Allow the user to interact with parent views
        requestParentListViewToNotInterceptTouchEvents(false);
    }

    return super.onTouchEvent(event);
}
 
源代码2 项目: CircularImageView   文件: CircleImageView.java
@Override
public boolean onTouchEvent(MotionEvent event) {
    boolean processed = false;
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            if (!isInCircle(event.getX(), event.getY())) {
                return false;
            }
            processed = true;
            mPressed = true;
            invalidate();
            break;
        case MotionEvent.ACTION_CANCEL:
        case MotionEvent.ACTION_UP:
            processed = true;
            mPressed = false;
            invalidate();
            if (!isInCircle(event.getX(), event.getY())) {
                return false;
            }
            break;
    }
    return super.onTouchEvent(event) || processed;
}
 
源代码3 项目: PocketEOS-Android   文件: SwipeItemLayout.java
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
    if (!mSwipeEnable) {
        return false;
    }

    int action = ev.getAction();
    switch (action) {
        case MotionEvent.ACTION_DOWN:
            mIsDragged = false;
            mDownX = ev.getX();
            mDownY = ev.getY();
            break;
        case MotionEvent.ACTION_MOVE:
            checkCanDragged(ev);
            break;
        case MotionEvent.ACTION_CANCEL:
        case MotionEvent.ACTION_UP:
            if (mIsDragged) {
                mDragHelper.processTouchEvent(ev);
                mIsDragged = false;
            }
            break;
        default:
            if (mIsDragged) {
                mDragHelper.processTouchEvent(ev);
            }
            break;
    }
    return mIsDragged || super.onInterceptTouchEvent(ev);
}
 
源代码4 项目: AndroidMvc   文件: CounterDetailScreen.java
@OnTouch(R.id.screen_detail_buttonIncrement)
boolean onTouchIncrement(final View v, MotionEvent event) {
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            controller.startContinuousIncrement();
            break;
        case MotionEvent.ACTION_UP:
        case MotionEvent.ACTION_CANCEL:
            controller.stopContinuousIncrement();
            break;
    }
    return false;
}
 
源代码5 项目: Kore   文件: ControlPad.java
private void setupListeners(Context context) {
    final Animation buttonInAnim = AnimationUtils.loadAnimation(context, R.anim.button_in);
    final Animation buttonOutAnim = AnimationUtils.loadAnimation(context, R.anim.button_out);

    RepeatListener repeatListener = new RepeatListener(initialButtonRepeatInterval,
                                                       buttonRepeatInterval, this,
                                                       buttonInAnim, buttonOutAnim, getContext());

    OnTouchListener feedbackTouchListener = new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    buttonInAnim.setFillAfter(true);
                    v.startAnimation(buttonInAnim);
                    break;
                case MotionEvent.ACTION_UP:
                case MotionEvent.ACTION_CANCEL:
                    v.startAnimation(buttonOutAnim);
                    break;
            }
            return false;
        }
    };

    leftButton.setOnTouchListener(repeatListener);
    rightButton.setOnTouchListener(repeatListener);
    upButton.setOnTouchListener(repeatListener);
    downButton.setOnTouchListener(repeatListener);
    setupButton(selectButton, feedbackTouchListener);
    setupButton(backButton, feedbackTouchListener);
    setupButton(infoButton, feedbackTouchListener);
    setupButton(contextButton, feedbackTouchListener);
    setupButton(osdButton, feedbackTouchListener);
}
 
源代码6 项目: turncardlistview   文件: TurnCardListView.java
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    if (mIsAnimating || mAdapter == null || mAdapter.getCount() == 0) {
        return super.dispatchTouchEvent(ev);
    }
    switch (ev.getAction()) {
    case MotionEvent.ACTION_DOWN:
        mStartX = ev.getRawX();
        mStartY = ev.getRawY();
        mIsTurning = false;
        mRatio = 0;
        break;
    case MotionEvent.ACTION_MOVE:
        int dx = (int) (ev.getRawX() - mStartX);
        int dy = (int) (ev.getRawY() - mStartY);
        if ((dx * dx + dy * dy) > mTouchSlop) {
            mRatio = dy * 1f / getMeasuredHeight();
            turning(mRatio);
            mIsTurning = true;
            return true;
        }
        break;
    case MotionEvent.ACTION_UP:
    case MotionEvent.ACTION_CANCEL:
        if (mIsTurning) {
            mIsTurning = false;
            float threshold = 0.1f;
            if (mRatio > threshold && mPosition < mAdapter.getCount() - 1) { // older
                new TurnAnimator().turn(true, mRatio);
            } else if (-mRatio > threshold && mPosition > 0) { // newer
                new TurnAnimator().turn(true, mRatio);
            } else {
                new TurnAnimator().turn(false, mRatio);
            }
            return true;
        }
    }
    return super.dispatchTouchEvent(ev);
}
 
@Override
public boolean onTouchEvent(MotionEvent event) {
	if (!SHOW_SEEKBAR) {
		return true;
	}
	
	float markRange = DensityUtils.dp2px(getContext(), 60);
	float x = event.getX();
	float y = event.getY();
	boolean up = false;
	switch (event.getAction()) {
	case MotionEvent.ACTION_DOWN:
		if (x < markPointX + markRange && x > markPointX - markRange
				&& y > markPointY - markRange && y < markPointY + markRange) {
			setParentScrollAble(false);
		}
		moved(x, y, up);
		break;
	case MotionEvent.ACTION_MOVE:
		moved(x, y, up);
		break;
	case MotionEvent.ACTION_UP:
		up = true;
		moved(x, y, up);
		break;
	case MotionEvent.ACTION_CANCEL:
		setParentScrollAble(true);
		up = true;
		moved(x, y, up);
		break;
	}
	return true;
}
 
@Override
public boolean onTouchEvent(MotionEvent ev) {
    final int action = ev.getAction();
    switch (action & MotionEvent.ACTION_MASK) {
        case MotionEvent.ACTION_DOWN:
            mActivePointerId = ev.getPointerId(0);
            break;
        case MotionEvent.ACTION_CANCEL:
        case MotionEvent.ACTION_UP:
            mActivePointerId = INVALID_POINTER_ID;
            break;
        case MotionEvent.ACTION_POINTER_UP:
            // Ignore deprecation, ACTION_POINTER_ID_MASK and
            // ACTION_POINTER_ID_SHIFT has same value and are deprecated
            // You can have either deprecation or lint target api warning
            final int pointerIndex = Compat.getPointerIndex(ev.getAction());
            final int pointerId = ev.getPointerId(pointerIndex);
            if (pointerId == mActivePointerId) {
                // This was our active pointer going up. Choose a new
                // active pointer and adjust accordingly.
                final int newPointerIndex = pointerIndex == 0 ? 1 : 0;
                mActivePointerId = ev.getPointerId(newPointerIndex);
                mLastTouchX = ev.getX(newPointerIndex);
                mLastTouchY = ev.getY(newPointerIndex);
            }
            break;
    }

    mActivePointerIndex = ev
            .findPointerIndex(mActivePointerId != INVALID_POINTER_ID ? mActivePointerId
                    : 0);
    try {
        return super.onTouchEvent(ev);
    } catch (IllegalArgumentException e) {
        // Fix for support lib bug, happening when onDestroy is
        return true;
    }
}
 
源代码9 项目: PictureSelector   文件: CustomGestureDetector.java
private boolean processTouchEvent(MotionEvent ev) {
    final int action = ev.getAction();
    switch (action & MotionEvent.ACTION_MASK) {
        case MotionEvent.ACTION_DOWN:
            mActivePointerId = ev.getPointerId(0);

            mVelocityTracker = VelocityTracker.obtain();
            if (null != mVelocityTracker) {
                mVelocityTracker.addMovement(ev);
            }

            mLastTouchX = getActiveX(ev);
            mLastTouchY = getActiveY(ev);
            mIsDragging = false;
            break;
        case MotionEvent.ACTION_MOVE:
            final float x = getActiveX(ev);
            final float y = getActiveY(ev);
            final float dx = x - mLastTouchX, dy = y - mLastTouchY;

            if (!mIsDragging) {
                // Use Pythagoras to see if drag length is larger than
                // touch slop
                mIsDragging = Math.sqrt((dx * dx) + (dy * dy)) >= mTouchSlop;
            }

            if (mIsDragging) {
                mListener.onDrag(dx, dy);
                mLastTouchX = x;
                mLastTouchY = y;

                if (null != mVelocityTracker) {
                    mVelocityTracker.addMovement(ev);
                }
            }
            break;
        case MotionEvent.ACTION_CANCEL:
            mActivePointerId = INVALID_POINTER_ID;
            // Recycle Velocity Tracker
            if (null != mVelocityTracker) {
                mVelocityTracker.recycle();
                mVelocityTracker = null;
            }
            break;
        case MotionEvent.ACTION_UP:
            mActivePointerId = INVALID_POINTER_ID;
            if (mIsDragging) {
                if (null != mVelocityTracker) {
                    mLastTouchX = getActiveX(ev);
                    mLastTouchY = getActiveY(ev);

                    // Compute velocity within the last 1000ms
                    mVelocityTracker.addMovement(ev);
                    mVelocityTracker.computeCurrentVelocity(1000);

                    final float vX = mVelocityTracker.getXVelocity(), vY = mVelocityTracker
                            .getYVelocity();

                    // If the velocity is greater than minVelocity, call
                    // listener
                    if (Math.max(Math.abs(vX), Math.abs(vY)) >= mMinimumVelocity) {
                        mListener.onFling(mLastTouchX, mLastTouchY, -vX,
                                -vY);
                    }
                }
            }

            // Recycle Velocity Tracker
            if (null != mVelocityTracker) {
                mVelocityTracker.recycle();
                mVelocityTracker = null;
            }
            break;
        case MotionEvent.ACTION_POINTER_UP:
            final int pointerIndex = Util.getPointerIndex(ev.getAction());
            final int pointerId = ev.getPointerId(pointerIndex);
            if (pointerId == mActivePointerId) {
                // This was our active pointer going up. Choose a new
                // active pointer and adjust accordingly.
                final int newPointerIndex = pointerIndex == 0 ? 1 : 0;
                mActivePointerId = ev.getPointerId(newPointerIndex);
                mLastTouchX = ev.getX(newPointerIndex);
                mLastTouchY = ev.getY(newPointerIndex);
            }
            break;
    }

    mActivePointerIndex = ev
            .findPointerIndex(mActivePointerId != INVALID_POINTER_ID ? mActivePointerId
                    : 0);
    return true;
}
 
源代码10 项目: Cotable   文件: MySwipeRefreshLayout.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 initialMotionY = getMotionEventY(ev, mActivePointerId);
            if (initialMotionY == -1) {
                return false;
            }
            mInitialMotionY = initialMotionY;

        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 - mInitialMotionY;
            if (yDiff > mTouchSlop && !mIsBeingDragged) {
                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;
}
 
源代码11 项目: spark   文件: ScrubGestureDetector.java
@Override
public boolean onTouch(View v, MotionEvent event) {
    if (!enabled) return false;

    final float x = event.getX();
    final float y = event.getY();
    switch (event.getActionMasked()) {
        case MotionEvent.ACTION_DOWN:
            // store the time to compute whether future events are 'long presses'
            downX = x;
            downY = y;

            handler.postDelayed(longPressRunnable, LONG_PRESS_TIMEOUT_MS);
            return true;
        case MotionEvent.ACTION_MOVE:
            // calculate the elapsed time since the down event
            float timeDelta = event.getEventTime() - event.getDownTime();

            // if the user has intentionally long-pressed
            if (timeDelta >= LONG_PRESS_TIMEOUT_MS) {
                handler.removeCallbacks(longPressRunnable);
                scrubListener.onScrubbed(x, y);
            } else {
                // if we moved before longpress, remove the callback if we exceeded the tap slop
                float deltaX = x - downX;
                float deltaY = y - downY;
                if (deltaX >= touchSlop || deltaY >= touchSlop) {
                    handler.removeCallbacks(longPressRunnable);
                    // We got a MOVE event that exceeded tap slop but before the long-press
                    // threshold, we don't care about this series of events anymore.
                    return false;
                }
            }

            return true;
        case MotionEvent.ACTION_UP:
        case MotionEvent.ACTION_CANCEL:
            handler.removeCallbacks(longPressRunnable);
            scrubListener.onScrubEnded();
            return true;
        default:
            return false;
    }
}
 
源代码12 项目: android-discourse   文件: LinePageIndicator.java
public boolean onTouchEvent(android.view.MotionEvent ev) {
    if (super.onTouchEvent(ev)) {
        return true;
    }
    if ((mViewPager == null) || (mViewPager.getAdapter().getCount() == 0)) {
        return false;
    }

    final int action = ev.getAction() & MotionEventCompat.ACTION_MASK;
    switch (action) {
        case MotionEvent.ACTION_DOWN:
            mActivePointerId = MotionEventCompat.getPointerId(ev, 0);
            mLastMotionX = ev.getX();
            break;

        case MotionEvent.ACTION_MOVE: {
            final int activePointerIndex = MotionEventCompat.findPointerIndex(ev, mActivePointerId);
            final float x = MotionEventCompat.getX(ev, activePointerIndex);
            final float deltaX = x - mLastMotionX;

            if (!mIsDragging) {
                if (Math.abs(deltaX) > mTouchSlop) {
                    mIsDragging = true;
                }
            }

            if (mIsDragging) {
                mLastMotionX = x;
                if (mViewPager.isFakeDragging() || mViewPager.beginFakeDrag()) {
                    mViewPager.fakeDragBy(deltaX);
                }
            }

            break;
        }

        case MotionEvent.ACTION_CANCEL:
        case MotionEvent.ACTION_UP:
            if (!mIsDragging) {
                final int count = mViewPager.getAdapter().getCount();
                final int width = getWidth();
                final float halfWidth = width / 2f;
                final float sixthWidth = width / 6f;

                if ((mCurrentPage > 0) && (ev.getX() < halfWidth - sixthWidth)) {
                    if (action != MotionEvent.ACTION_CANCEL) {
                        mViewPager.setCurrentItem(mCurrentPage - 1);
                    }
                    return true;
                } else if ((mCurrentPage < count - 1) && (ev.getX() > halfWidth + sixthWidth)) {
                    if (action != MotionEvent.ACTION_CANCEL) {
                        mViewPager.setCurrentItem(mCurrentPage + 1);
                    }
                    return true;
                }
            }

            mIsDragging = false;
            mActivePointerId = INVALID_POINTER;
            if (mViewPager.isFakeDragging())
                mViewPager.endFakeDrag();
            break;

        case MotionEventCompat.ACTION_POINTER_DOWN: {
            final int index = MotionEventCompat.getActionIndex(ev);
            mLastMotionX = MotionEventCompat.getX(ev, index);
            mActivePointerId = MotionEventCompat.getPointerId(ev, index);
            break;
        }

        case MotionEventCompat.ACTION_POINTER_UP:
            final int pointerIndex = MotionEventCompat.getActionIndex(ev);
            final int pointerId = MotionEventCompat.getPointerId(ev, pointerIndex);
            if (pointerId == mActivePointerId) {
                final int newPointerIndex = pointerIndex == 0 ? 1 : 0;
                mActivePointerId = MotionEventCompat.getPointerId(ev, newPointerIndex);
            }
            mLastMotionX = MotionEventCompat.getX(ev, MotionEventCompat.findPointerIndex(ev, mActivePointerId));
            break;
    }

    return true;
}
 
源代码13 项目: TelePlus-Android   文件: VideoSeekBarView.java
@Override
public boolean onTouchEvent(MotionEvent event) {
    if (event == null) {
        return false;
    }
    float x = event.getX();
    float y = event.getY();
    float thumbX = (int)((getMeasuredWidth() - thumbWidth) * progress);
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        int additionWidth = (getMeasuredHeight() - thumbWidth) / 2;
        if (thumbX - additionWidth <= x && x <= thumbX + thumbWidth + additionWidth && y >= 0 && y <= getMeasuredHeight()) {
            pressed = true;
            thumbDX = (int)(x - thumbX);
            getParent().requestDisallowInterceptTouchEvent(true);
            invalidate();
            return true;
        }
    } else if (event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL) {
        if (pressed) {
            if (event.getAction() == MotionEvent.ACTION_UP && delegate != null) {
                delegate.onSeekBarDrag(thumbX / (float)(getMeasuredWidth() - thumbWidth));
            }
            pressed = false;
            invalidate();
            return true;
        }
    } else if (event.getAction() == MotionEvent.ACTION_MOVE) {
        if (pressed) {
            thumbX = (int)(x - thumbDX);
            if (thumbX < 0) {
                thumbX = 0;
            } else if (thumbX > getMeasuredWidth() - thumbWidth) {
                thumbX = getMeasuredWidth() - thumbWidth;
            }
            progress = thumbX / (getMeasuredWidth() - thumbWidth);
            invalidate();
            return true;
        }
    }
    return false;
}
 
源代码14 项目: iBeebo   文件: LongClickableLinkMovementMethod.java
@Override
public boolean onTouchEvent(@NonNull TextView widget, @NonNull Spannable buffer, @NonNull MotionEvent event) {
    int action = event.getAction();

    if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_DOWN) {

        Layout layout = widget.getLayout();

        if (layout == null) {
            return super.onTouchEvent(widget, buffer, event);
        }

        int x = (int) event.getX();
        int y = (int) event.getY();

        x -= widget.getTotalPaddingLeft();
        y -= widget.getTotalPaddingTop();

        x += widget.getScrollX();
        y += widget.getScrollY();

        int line = layout.getLineForVertical(y);
        int off = layout.getOffsetForHorizontal(line, x);

        MyURLSpan[] link = buffer.getSpans(off, off, MyURLSpan.class);

        if (link.length != 0) {
            if (action == MotionEvent.ACTION_UP) {
                if (!mHasPerformedLongPress) {
                    link[0].onClick(widget);
                }
                pressed = false;
                lastEvent = new float[2];
            } else {
                pressed = true;
                lastEvent[0] = event.getX();
                lastEvent[1] = event.getY();
                checkForLongClick(link, widget);
            }

            return true;
        }
    } else if (action == MotionEvent.ACTION_MOVE) {
        float[] position = {
                event.getX(), event.getY()
        };
        // int slop =
        // ViewConfiguration.get(widget.getContext()).getScaledTouchSlop();
        int slop = 6;
        float xInstance = Math.abs(lastEvent[0] - position[0]);
        float yInstance = Math.abs(lastEvent[1] - position[1]);
        double instance = Math.sqrt(Math.hypot(xInstance, yInstance));
        if (instance > slop) {
            pressed = false;
        }
    } else if (action == MotionEvent.ACTION_CANCEL) {
        pressed = false;
        lastEvent = new float[2];
    } else {
        pressed = false;
        lastEvent = new float[2];
    }
    return super.onTouchEvent(widget, buffer, event);
}
 
源代码15 项目: libcommon   文件: ZoomAspectScaledTextureView.java
@SuppressLint({"ClickableViewAccessibility", "SwitchIntDef"})
@Override
public boolean onTouchEvent(final MotionEvent event) {
	if (DEBUG) Log.v(TAG, "onTouchEvent:");

	if (handleOnTouchEvent(event)) {
		return true;	// 処理済み
	}

	if (mHandleTouchEvent == TOUCH_DISABLED) {
		return super.onTouchEvent(event);
	}

	final int actionCode = event.getActionMasked();	// >= API8

	switch (actionCode) {
	case MotionEvent.ACTION_DOWN:
		// single touch
		startWaiting(event);
		return true;
	case MotionEvent.ACTION_POINTER_DOWN:
	{	// マルチタッチ時の処理
		switch (mState) {
		case STATE_WAITING:
			// 最初のマルチタッチ → 拡大縮小・回転操作待機開始
			removeCallbacks(mWaitImageReset);
			// pass through
		case STATE_DRAGGING:
			if (event.getPointerCount() > 1) {
				startCheck(event);
				return true;
			}
			break;
		}
		break;
	}
	case MotionEvent.ACTION_MOVE:
	{
		// moving with single and multi touch
		switch (mState) {
		case STATE_WAITING:
			if (((mHandleTouchEvent & TOUCH_ENABLED_MOVE) == TOUCH_ENABLED_MOVE)
				&& checkTouchMoved(event)) {

				removeCallbacks(mWaitImageReset);
				setState(STATE_DRAGGING);
				return true;
			}
			break;
		case STATE_DRAGGING:
			if (processDrag(event))
				return true;
			break;
		case STATE_CHECKING:
			if (checkTouchMoved(event)
				&& ((mHandleTouchEvent & TOUCH_ENABLED_ZOOM) == TOUCH_ENABLED_ZOOM)) {

				startZoom(event);
				return true;
			}
			break;
		case STATE_ZOOMING:
			if (processZoom(event))
				return true;
			break;
		case STATE_ROTATING:
			if (processRotate(event))
				return true;
			break;
		}
		break;
	}
	case MotionEvent.ACTION_CANCEL:
		// pass through
	case MotionEvent.ACTION_UP:
		removeCallbacks(mWaitImageReset);
		removeCallbacks(mStartCheckRotate);
		if ((actionCode == MotionEvent.ACTION_UP) && (mState == STATE_WAITING)) {
			final long downTime = SystemClock.uptimeMillis() - event.getDownTime();
			if (downTime > LONG_PRESS_TIMEOUT) {
				performLongClick();
			} else if (downTime < TAP_TIMEOUT) {
				performClick();
			}
		}
		// pass through
	case MotionEvent.ACTION_POINTER_UP:
		setState(STATE_NON);
		break;
	}
	return super.onTouchEvent(event);
}
 
源代码16 项目: TelePlus-Android   文件: RecyclerListView.java
@Override
public boolean onTouchEvent(MotionEvent event)
{
    switch (event.getAction())
    {
        case MotionEvent.ACTION_DOWN:
            float x = event.getX();
            lastY = event.getY();
            float currectY = (float) Math.ceil((getMeasuredHeight() - AndroidUtilities.dp(24 + 30)) * progress) + AndroidUtilities.dp(12);
            if (LocaleController.isRTL && x > AndroidUtilities.dp(25) || !LocaleController.isRTL && x < AndroidUtilities.dp(107) || lastY < currectY || lastY > currectY + AndroidUtilities.dp(30))
            {
                return false;
            }
            startDy = lastY - currectY;
            pressed = true;
            lastUpdateTime = System.currentTimeMillis();
            getCurrentLetter();
            invalidate();
            return true;
        case MotionEvent.ACTION_MOVE:
            if (!pressed)
            {
                return true;
            }
            float newY = event.getY();
            float minY = AndroidUtilities.dp(12) + startDy;
            float maxY = getMeasuredHeight() - AndroidUtilities.dp(12 + 30) + startDy;
            if (newY < minY)
            {
                newY = minY;
            }
            else if (newY > maxY)
            {
                newY = maxY;
            }
            float dy = newY - lastY;
            lastY = newY;
            progress += dy / (getMeasuredHeight() - AndroidUtilities.dp(24 + 30));
            if (progress < 0)
            {
                progress = 0;
            }
            else if (progress > 1)
            {
                progress = 1;
            }
            getCurrentLetter();
            invalidate();
            return true;
        case MotionEvent.ACTION_UP:
        case MotionEvent.ACTION_CANCEL:
            pressed = false;
            lastUpdateTime = System.currentTimeMillis();
            invalidate();
            return true;
    }
    return super.onTouchEvent(event);
}
 
源代码17 项目: AndroidTreeView   文件: TwoDScrollView.java
@Override
 public boolean onInterceptTouchEvent(MotionEvent ev) {
/*
* This method JUST determines whether we want to intercept the motion.
* If we return true, onMotionEvent will be called and we do the actual
* scrolling there.
*
* Shortcut the most recurring case: the user is in the dragging
* state and he is moving his finger.  We want to intercept this
* motion.
*/
     final int action = ev.getAction();
     if ((action == MotionEvent.ACTION_MOVE) && (mIsBeingDragged)) {
         return true;
     }
     if (!canScroll()) {
         mIsBeingDragged = false;
         return false;
     }
     final float y = ev.getY();
     final float x = ev.getX();
     switch (action) {
         case MotionEvent.ACTION_MOVE:
    /*
    * mIsBeingDragged == false, otherwise the shortcut would have caught it. Check
    * whether the user has moved far enough from his original down touch.
    */
    /*
    * Locally do absolute value. mLastMotionY is set to the y value
    * of the down event.
    */
             final int yDiff = (int) Math.abs(y - mLastMotionY);
             final int xDiff = (int) Math.abs(x - mLastMotionX);
             if (yDiff > mTouchSlop || xDiff > mTouchSlop) {
                 mIsBeingDragged = true;
             }
             break;

         case MotionEvent.ACTION_DOWN:
    /* Remember location of down touch */
             mLastMotionY = y;
             mLastMotionX = x;

    /*
    * If being flinged and user touches the screen, initiate drag;
    * otherwise don't.  mScroller.isFinished should be false when
    * being flinged.
    */
             mIsBeingDragged = !mScroller.isFinished();
             break;

         case MotionEvent.ACTION_CANCEL:
         case MotionEvent.ACTION_UP:
    /* Release the drag */
             mIsBeingDragged = false;
             break;
     }

/*
* The only time we want to intercept motion events is if we are in the
* drag mode.
*/
     return mIsBeingDragged;
 }
 
源代码18 项目: Chandelier   文件: ChandelierLayout.java
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
  ensureTarget();

  final int action = MotionEventCompat.getActionMasked(ev);

  if (isReturningToStart && action == MotionEvent.ACTION_DOWN) {
    isReturningToStart = false;
  }

  if (!isEnabled() || isReturningToStart || canChildScrollUp()) {
    // Fail fast if we're not in a state where a swipe is possible
    return false;
  }

  switch (action) {
    case MotionEvent.ACTION_DOWN:
      setTargetOffsetTopAndBottom(originalOffsetTop - ornamentLayout.getTop());
      activePointerId = MotionEventCompat.getPointerId(ev, 0);
      isBeingDragged = false;
      final float initialDownY = getMotionEventY(ev, activePointerId);
      if (initialDownY == -1) {
        return false;
      }
      this.initialDownY = initialDownY;
      break;

    case MotionEvent.ACTION_MOVE:
      if (activePointerId == 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, activePointerId);
      if (y == -1) {
        return false;
      }
      final float yDiff = y - this.initialDownY;
      if (yDiff > touchSlop && !isBeingDragged) {
        initialMotionY = this.initialDownY + touchSlop;
        isBeingDragged = true;
      }
      break;

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

    case MotionEvent.ACTION_UP:
    case MotionEvent.ACTION_CANCEL:
      isBeingDragged = false;
      activePointerId = INVALID_POINTER;
      break;
  }

  return isBeingDragged;
}
 
源代码19 项目: firefox-echo-show   文件: NestedGeckoView.java
@Override
public boolean onTouchEvent(MotionEvent ev) {
    boolean eventHandled = false;

    final MotionEvent event = MotionEvent.obtain(ev);
    final int action = event.getActionMasked();
    if (action == MotionEvent.ACTION_DOWN) {
        mNestedOffsetY = 0;
    }
    final int eventY = (int) event.getY();
    event.offsetLocation(0, mNestedOffsetY);

    switch (action) {
        case MotionEvent.ACTION_MOVE:
            int deltaY = mLastY - eventY;

            if (dispatchNestedPreScroll(0, deltaY, mScrollConsumed, mScrollOffset)) {
                deltaY -= mScrollConsumed[1];
                mLastY = eventY - mScrollOffset[1];
                event.offsetLocation(0, -mScrollOffset[1]);
                mNestedOffsetY += mScrollOffset[1];
            }

            eventHandled = super.onTouchEvent(event);

            if (dispatchNestedScroll(0, mScrollOffset[1], 0, deltaY, mScrollOffset)) {
                event.offsetLocation(0, mScrollOffset[1]);
                mNestedOffsetY += mScrollOffset[1];
                mLastY -= mScrollOffset[1];
            }
            break;

        case MotionEvent.ACTION_DOWN:
            eventHandled = super.onTouchEvent(event);
            mLastY = eventY;

            startNestedScroll(ViewCompat.SCROLL_AXIS_VERTICAL);
            break;

        case MotionEvent.ACTION_UP:
        case MotionEvent.ACTION_CANCEL:
            eventHandled = super.onTouchEvent(event);
            stopNestedScroll();
            break;

        default:
            // We don't care about other touch events
    }

    return eventHandled;
}
 
源代码20 项目: BigApp_Discuz_Android   文件: WeiboTextView.java
@Override
        public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event) {
            int action = event.getAction();

//            LogUtils.printLog(WeiboTextView.class, "MotionEvent:" + action);

//            if (action == MotionEvent.ACTION_MOVE) {
//                isPressed = false;
//            }
            switch (action) {
                case MotionEvent.ACTION_DOWN:
                    break;
                case MotionEvent.ACTION_UP:
                    break;

                case MotionEvent.ACTION_CANCEL:
                    buffer.setSpan(new BackgroundColorSpan(0x00000000), 0, weiboTextView.length(),
                            Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                    Selection.setSelection(buffer, 0, weiboTextView.length());
                    break;
            }


            if (action == MotionEvent.ACTION_UP ||
                    action == MotionEvent.ACTION_DOWN) {
                int x = (int) event.getX();
                int y = (int) event.getY();

                x -= widget.getTotalPaddingLeft();
                y -= widget.getTotalPaddingTop();

                x += widget.getScrollX();
                y += widget.getScrollY();

                Layout layout = widget.getLayout();
                int line = layout.getLineForVertical(y);
                int off = layout.getOffsetForHorizontal(line, x);

                ClickableSpan[] link = buffer.getSpans(off, off, ClickableSpan.class);

                if (link.length != 0) {

                    int start = buffer.getSpanStart(link[0]);
                    int end = buffer.getSpanEnd(link[0]);

//                    LogUtils.printLog(WebViewUtils.class, "start:" + start + " end:" + end);

                    if (action == MotionEvent.ACTION_UP) {
                        link[0].onClick(widget);
                        buffer.setSpan(new BackgroundColorSpan(0x00000000), start, end,
                                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                        Selection.setSelection(buffer, start, end);
                    } else if (action == MotionEvent.ACTION_DOWN) {
                        buffer.setSpan(new BackgroundColorSpan(weiboTextView.clickBgClolr), start, end,
                                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                        Selection.setSelection(buffer, start, end);
                    }

                    if (widget instanceof WeiboTextView) {
                        ((WeiboTextView) widget).linkHit = true;
                    }
                    return true;
                } else {
                    Selection.removeSelection(buffer);
                    Touch.onTouchEvent(widget, buffer, event);
                    return false;
                }
            }


            return Touch.onTouchEvent(widget, buffer, event);
        }