android.view.MotionEvent#getActionIndex ( )源码实例Demo

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

源代码1 项目: FirefoxReality   文件: PlatformActivity.java
@Override
public boolean onGenericMotionEvent(MotionEvent aEvent) {
    if (aEvent.getActionIndex() != 0) {
        Log.e(LOGTAG,"aEvent.getActionIndex()=" + aEvent.getActionIndex());
        return false;
    }

    if (aEvent.getAction() != MotionEvent.ACTION_HOVER_MOVE) {
        return false;
    }

    final float xx = aEvent.getX(0);
    final float yy = aEvent.getY(0);
    queueRunnable(() -> touchEvent(false, xx, yy));
    return true;
}
 
源代码2 项目: Hentoid   文件: ZoomableRecyclerView.java
@Override
public boolean onTouchEvent(MotionEvent ev) {
    int action = ev.getActionMasked();
    int actionIndex = ev.getActionIndex();

    switch (action) {
        case MotionEvent.ACTION_DOWN:
            motionActionDownLocal(ev);
            break;
        case MotionEvent.ACTION_POINTER_DOWN:
            motionActionPointerDown(ev, actionIndex);
            break;
        case MotionEvent.ACTION_MOVE:
            return motionActionMoveLocal(ev);
        case MotionEvent.ACTION_UP:
            motionActionUpLocal(ev);
            break;
        case MotionEvent.ACTION_CANCEL:
            motionActionCancel();
            break;
        default:
            // Nothing to process as default
    }
    return super.onTouchEvent(ev);
}
 
源代码3 项目: FrescoUtils   文件: MultiPointerGestureDetector.java
private int getPressedPointerIndex(MotionEvent event, int i) {
  final int count = event.getPointerCount();
  final int action = event.getActionMasked();
  final int index = event.getActionIndex();
  if (action == MotionEvent.ACTION_UP ||
          action == MotionEvent.ACTION_POINTER_UP) {
    if (i >= index) {
      i++;
    }
  }
  return (i < count) ? i : -1;
}
 
源代码4 项目: openboard   文件: SuggestionStripView.java
@Override
public boolean onInterceptTouchEvent(final MotionEvent me) {
    if (mStripVisibilityGroup.isShowingImportantNoticeStrip()) {
        return false;
    }
    // Detecting sliding up finger to show {@link MoreSuggestionsView}.
    if (!mMoreSuggestionsView.isShowingInParent()) {
        mLastX = (int)me.getX();
        mLastY = (int)me.getY();
        return mMoreSuggestionsSlidingDetector.onTouchEvent(me);
    }
    if (mMoreSuggestionsView.isInModalMode()) {
        return false;
    }

    final int action = me.getAction();
    final int index = me.getActionIndex();
    final int x = (int)me.getX(index);
    final int y = (int)me.getY(index);
    if (Math.abs(x - mOriginX) >= mMoreSuggestionsModalTolerance
            || mOriginY - y >= mMoreSuggestionsModalTolerance) {
        // Decided to be in the sliding suggestion mode only when the touch point has been moved
        // upward. Further {@link MotionEvent}s will be delivered to
        // {@link #onTouchEvent(MotionEvent)}.
        mNeedsToTransformTouchEventToHoverEvent =
                AccessibilityUtils.Companion.getInstance().isTouchExplorationEnabled();
        mIsDispatchingHoverEventToMoreSuggestions = false;
        return true;
    }

    if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_POINTER_UP) {
        // Decided to be in the modal input mode.
        mMoreSuggestionsView.setModalMode();
    }
    return false;
}
 
源代码5 项目: ShaderEditor   文件: ScalingImageView.java
private void transform(MotionEvent event) {
	transformMatrix.set(initialMatrix);

	int pointerCount = event.getPointerCount();
	if (pointerCount == 1) {
		int i = event.getActionIndex();
		PointF point = initialPoint.get(event.getPointerId(i));
		if (point != null) {
			transformMatrix.postTranslate(
					event.getX(i) - point.x,
					event.getY(i) - point.y);
		}
	} else if (pointerCount > 1) {
		transformTapeline.set(event, 0, 1);

		float scale = fitScale(
				initialMatrix,
				drawableRect,
				transformTapeline.length / initialTapeline.length);

		transformMatrix.postScale(
				scale,
				scale,
				initialTapeline.pivotX,
				initialTapeline.pivotY);

		transformMatrix.postTranslate(
				transformTapeline.pivotX - initialTapeline.pivotX,
				transformTapeline.pivotY - initialTapeline.pivotY);
	}

	if (fitTranslate(transformMatrix, drawableRect, bounds)) {
		initTransform(event, -1);
	}

	super.setImageMatrix(transformMatrix);
}
 
/**
 * Gets the index of the i-th pressed pointer.
 * Normally, the index will be equal to i, except in the case when the pointer is released.
 * @return index of the specified pointer or -1 if not found (i.e. not enough pointers are down)
 */
private int getPressedPointerIndex(MotionEvent event, int i) {
  final int count = event.getPointerCount();
  final int action = event.getActionMasked();
  final int index = event.getActionIndex();
  if (action == MotionEvent.ACTION_UP ||
      action == MotionEvent.ACTION_POINTER_UP) {
    if (i >= index) {
      i++;
    }
  }
  return (i < count) ? i : -1;
}
 
源代码7 项目: CameraV   文件: PZSImageView.java
@Override
public boolean onTouchEvent(MotionEvent event) {

	if (mHandleTouch)
	{
		int action = parseMotionEvent(event);
		switch(action){
		case PZS_ACTION_INIT:				
			initGestureAction(event.getX(), event.getY());
			break;
		case PZS_ACTION_SCALE:
			handleScale(event);
			break;
		case PZS_ACTION_TRANSLATE:
			handleTranslate(event);
			break;
		case PZS_ACTION_TRANSLATE_TO_SCALE:
			initGestureAction(event.getX(), event.getY());
			break;
		case PZS_ACTION_SCALE_TO_TRANSLATE:
			int activeIndex = (event.getActionIndex() == 0 ? 1 : 0);
			initGestureAction(event.getX(activeIndex), event.getY(activeIndex));
			break;
		case PZS_ACTION_FIT_CENTER:
			fitCenter();
			initGestureAction(event.getX(), event.getY());
			break;
		case PZS_ACTION_CANCEL:		
			break;
		}
		
		//check current position of bitmap.
		validateMatrix();
		updateMatrix();
		
		return true;
	}
	else
		return false;
}
 
源代码8 项目: FruitNinja   文件: GameSurfaceView.java
@Override
   public boolean onTouch(View v, MotionEvent event) {
switch (event.getActionMasked()) {
       	case MotionEvent.ACTION_DOWN:
       	    createNewPath(event.getX(), event.getY(), event.getPointerId(0));
       	    break;
       	case MotionEvent.ACTION_POINTER_DOWN:
       
       	    int newPointerIndex = event.getActionIndex();
       	    createNewPath(event.getX(newPointerIndex), event.getY(newPointerIndex), event.getPointerId(newPointerIndex));
       
       	    break;
       	case MotionEvent.ACTION_MOVE:
       
       	    for (int i = 0; i < paths.size(); i++) {
       		int pointerIndex = event.findPointerIndex(paths.indexOfKey(i));
       
       		if (pointerIndex >= 0) {
       		    paths.valueAt(i).lineTo(event.getX(pointerIndex), event.getY(pointerIndex));
       		    paths.valueAt(i).updateTimeDrawn(System.currentTimeMillis());
       		}
       	    }
       	    break;
}

gameThread.updateDrawnPath(paths);
return true;
   }
 
@Override
public void handleInput(MotionEvent event, GameState gameState, ArrayList<Rect> buttons) {
   // In each MotionEvent object, every active pointer is present. Therefore looping through them all for an event on only one of them is obviously wrong.
    // The getActionIndex returns the index in the array of the pointer that performed/trigged the action/method call. So using getX(i) and getY(i) only gets a true result
    // on the button that was actually pressed/removed!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    int i = event.getActionIndex();
    int x = (int) event.getX(i);
    int y = (int) event.getY(i);

    switch (event.getAction() & MotionEvent.ACTION_MASK) {

        case MotionEvent.ACTION_UP:
            if (buttons.get(HUD.UP).contains(x,y)
                    || buttons.get(HUD.DOWN).contains(x,y)) {

                // Player has released either up or down
                mTransform.stopVertical();
            }
            break;

        case MotionEvent.ACTION_DOWN:
            if (buttons.get(HUD.UP).contains(x,y)) {
                // Player has pressed up
                mTransform.headUp();
            } else if (buttons.get(HUD.DOWN).contains(x,y)) {
                // Player has pressed down
                mTransform.headDown();
            } else if (buttons.get(HUD.FLIP).contains(x,y)) {
                // Player has released the flip button
                mTransform.flip();
            } else if (buttons.get(HUD.SHOOT).contains(x,y)) {
                mPLS.spawnPlayerLaser(mTransform);
            }
            break;

        case MotionEvent.ACTION_POINTER_UP:
            if (buttons.get(HUD.UP).contains(x, y)
                    || buttons.get(HUD.DOWN).contains(x, y)) {
                // Player has released either up or down
                mTransform.stopVertical();
            }
            break;

        case MotionEvent.ACTION_POINTER_DOWN:
            if (buttons.get(HUD.UP).contains(x, y)) {
                // Player has pressed up
                mTransform.headUp();
            } else if (buttons.get(HUD.DOWN).contains(x, y)) {
                // Player has pressed down
                mTransform.headDown();
            } else if (buttons.get(HUD.FLIP).contains(x, y)) {
                // Player has released the flip button
                mTransform.flip();
            } else if (buttons.get(HUD.SHOOT).contains(x, y)) {
                mPLS.spawnPlayerLaser(mTransform);
            }
            break;
    }
}
 
源代码10 项目: pin   文件: RotaryControlView.java
@Override
public boolean onTouchEvent(MotionEvent event) {
    super.onTouchEvent(event);

    Log.d("RotaryControlView", "Touch Event with pointer index: " + event.getActionIndex());

    if(event.getActionIndex() != 0)
        return true;//We only care about pointer 1

    int paddingLeft = getPaddingLeft();
    int paddingTop = getPaddingTop();
    int paddingRight = getPaddingRight();
    int paddingBottom = getPaddingBottom();

    int right = getWidth() - paddingRight;
    int bottom = getHeight() - paddingBottom;

    int contentWidth = right - paddingLeft;
    int contentHeight = bottom - paddingTop;
    float cx = paddingLeft + (0.5f * contentWidth);
    float cy = paddingTop + (0.5f * contentHeight);

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

    double unit = ((double) mMaxValue - mMinValue) / Math.abs(mEndAngle - mStartAngle);

    float a, c;
    double angle;

    a = Math.abs(y - cy);
    c = Math.abs(x - cx);

    if(c != 0)
        angle = Math.toDegrees(Math.atan(a / c));
    else
        angle = 0;

    if(x < cx)
        angle = 180 - angle;
    if(y < cy)
        angle = 360 - angle;


    Log.d("RotaryControlView", "onTouchMove, alpha: " + angle);


    switch(event.getActionMasked()) {
        case MotionEvent.ACTION_DOWN:
            Log.d("RotaryControlView", "onTouchDown");
            mTouch.set(x, y);
            mLastValue = mValue;

            if(mValListener != null)
                mValListener.onUserChangeBegin(mValue);
            break;
        case MotionEvent.ACTION_MOVE:

            double diffangle;
            if(Math.abs(angle - mAngleLastTouch) > 180)
                diffangle = (360 - angle) - mAngleLastTouch;
            else
                diffangle = angle - mAngleLastTouch;

            double range = mEndAngle - mStartAngle;
            while(range <= 0)
                range += 360;

            mLastValue += (int) Math.round(diffangle * (mMaxValue - mMinValue) / range);
            mLastValue = Math.min(mLastValue, mMaxValue);
            mLastValue = Math.max(mLastValue, mMinValue);

            Log.d("RotaryControlView", "onTouchMove, diffangle: " + diffangle);

            int val = (int) mLastValue;
            this.mValue = val - (val % mStepValue);

            if(mValListener != null)
                mValListener.onUserChange(mValue);
            invalidate();
            break;
        case MotionEvent.ACTION_CANCEL:
            break;
        case MotionEvent.ACTION_UP:
            if(mValListener != null)
                mValListener.onUserChangeEnd(mValue);
            Log.d("RotaryControlView", "onTouchUp");
    }

    mAngleLastTouch = angle;
    return true;
}
 
源代码11 项目: UltimateAndroid   文件: PullToZoomListView.java
public boolean onTouchEvent(MotionEvent paramMotionEvent) {
	Log.d("mmm", "" + (0xFF & paramMotionEvent.getAction()));
	switch (0xFF & paramMotionEvent.getAction()) {
	case 4:
	case 0:
		if (!this.mScalingRunnalable.mIsFinished) {
			this.mScalingRunnalable.abortAnimation();
		}
		this.mLastMotionY = paramMotionEvent.getY();
		this.mActivePointerId = paramMotionEvent.getPointerId(0);
		this.mMaxScale = (this.mScreenHeight / this.mHeaderHeight);
		this.mLastScale = (this.mHeaderContainer.getBottom() / this.mHeaderHeight);
		break;
	case 2:
		Log.d("mmm", "mActivePointerId" + mActivePointerId);
		int j = paramMotionEvent.findPointerIndex(this.mActivePointerId);
		if (j == -1) {
			Log.e("PullToZoomListView", "Invalid pointerId="
					+ this.mActivePointerId + " in onTouchEvent");
		} else {
			if (this.mLastMotionY == -1.0F)
				this.mLastMotionY = paramMotionEvent.getY(j);
			if (this.mHeaderContainer.getBottom() >= this.mHeaderHeight) {
				ViewGroup.LayoutParams localLayoutParams = this.mHeaderContainer
						.getLayoutParams();
				float f = ((paramMotionEvent.getY(j) - this.mLastMotionY + this.mHeaderContainer
						.getBottom()) / this.mHeaderHeight - this.mLastScale)
						/ 2.0F + this.mLastScale;
				if ((this.mLastScale <= 1.0D) && (f < this.mLastScale)) {
					localLayoutParams.height = this.mHeaderHeight;
					this.mHeaderContainer
							.setLayoutParams(localLayoutParams);
					return super.onTouchEvent(paramMotionEvent);
				}
				this.mLastScale = Math.min(Math.max(f, 1.0F),
						this.mMaxScale);
				localLayoutParams.height = ((int) (this.mHeaderHeight * this.mLastScale));
				if (localLayoutParams.height < this.mScreenHeight)
					this.mHeaderContainer
							.setLayoutParams(localLayoutParams);
				this.mLastMotionY = paramMotionEvent.getY(j);
				return true;
			}
			this.mLastMotionY = paramMotionEvent.getY(j);
		}
		break;
	case 1:
		reset();
		endScraling();
		break;
	case 3:
		int i = paramMotionEvent.getActionIndex();
		this.mLastMotionY = paramMotionEvent.getY(i);
		this.mActivePointerId = paramMotionEvent.getPointerId(i);
		break;
	case 5:
		onSecondaryPointerUp(paramMotionEvent);
		this.mLastMotionY = paramMotionEvent.getY(paramMotionEvent
				.findPointerIndex(this.mActivePointerId));
		break;
	case 6:
	}
	return super.onTouchEvent(paramMotionEvent);
}
 
源代码12 项目: android_9.0.0_r45   文件: StackView.java
private void onSecondaryPointerUp(MotionEvent ev) {
    final int activePointerIndex = ev.getActionIndex();
    final int pointerId = ev.getPointerId(activePointerIndex);
    if (pointerId == mActivePointerId) {

        int activeViewIndex = (mSwipeGestureType == GESTURE_SLIDE_DOWN) ? 0 : 1;

        View v = getViewAtRelativeIndex(activeViewIndex);
        if (v == null) return;

        // Our primary pointer has gone up -- let's see if we can find
        // another pointer on the view. If so, then we should replace
        // our primary pointer with this new pointer and adjust things
        // so that the view doesn't jump
        for (int index = 0; index < ev.getPointerCount(); index++) {
            if (index != activePointerIndex) {

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

                mTouchRect.set(v.getLeft(), v.getTop(), v.getRight(), v.getBottom());
                if (mTouchRect.contains(Math.round(x), Math.round(y))) {
                    float oldX = ev.getX(activePointerIndex);
                    float oldY = ev.getY(activePointerIndex);

                    // adjust our frame of reference to avoid a jump
                    mInitialY += (y - oldY);
                    mInitialX += (x - oldX);

                    mActivePointerId = ev.getPointerId(index);
                    if (mVelocityTracker != null) {
                        mVelocityTracker.clear();
                    }
                    // ok, we're good, we found a new pointer which is touching the active view
                    return;
                }
            }
        }
        // if we made it this far, it means we didn't find a satisfactory new pointer :(,
        // so end the gesture
        handlePointerUp(ev);
    }
}
 
@Override
public void handleInput(MotionEvent event, GameState gameState, ArrayList<Rect> buttons) {
   // In each MotionEvent object, every active pointer is present. Therefore looping through them all for an event on only one of them is obviously wrong.
    // The getActionIndex returns the index in the array of the pointer that performed/trigged the action/method call. So using getX(i) and getY(i) only gets a true result
    // on the button that was actually pressed/removed!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    int i = event.getActionIndex();
    int x = (int) event.getX(i);
    int y = (int) event.getY(i);

    switch (event.getAction() & MotionEvent.ACTION_MASK) {

        case MotionEvent.ACTION_UP:
            if (buttons.get(HUD.UP).contains(x,y)
                    || buttons.get(HUD.DOWN).contains(x,y)) {

                // Player has released either up or down
                mTransform.stopVertical();
            }
            break;

        case MotionEvent.ACTION_DOWN:
            if (buttons.get(HUD.UP).contains(x,y)) {
                // Player has pressed up
                mTransform.headUp();
            } else if (buttons.get(HUD.DOWN).contains(x,y)) {
                // Player has pressed down
                mTransform.headDown();
            } else if (buttons.get(HUD.FLIP).contains(x,y)) {
                // Player has released the flip button
                mTransform.flip();
            } else if (buttons.get(HUD.SHOOT).contains(x,y)) {
                mPLS.spawnPlayerLaser(mTransform);
            }
            break;

        case MotionEvent.ACTION_POINTER_UP:
            if (buttons.get(HUD.UP).contains(x, y)
                    || buttons.get(HUD.DOWN).contains(x, y)) {
                // Player has released either up or down
                mTransform.stopVertical();
            }
            break;

        case MotionEvent.ACTION_POINTER_DOWN:
            if (buttons.get(HUD.UP).contains(x, y)) {
                // Player has pressed up
                mTransform.headUp();
            } else if (buttons.get(HUD.DOWN).contains(x, y)) {
                // Player has pressed down
                mTransform.headDown();
            } else if (buttons.get(HUD.FLIP).contains(x, y)) {
                // Player has released the flip button
                mTransform.flip();
            } else if (buttons.get(HUD.SHOOT).contains(x, y)) {
                mPLS.spawnPlayerLaser(mTransform);
            }
            break;
    }
}
 
源代码14 项目: Indic-Keyboard   文件: SuggestionStripView.java
@Override
public boolean onTouchEvent(final MotionEvent me) {
    if (!mMoreSuggestionsView.isShowingInParent()) {
        // Ignore any touch event while more suggestions panel hasn't been shown.
        // Detecting sliding up is done at {@link #onInterceptTouchEvent}.
        return true;
    }
    // In the sliding input mode. {@link MotionEvent} should be forwarded to
    // {@link MoreSuggestionsView}.
    final int index = me.getActionIndex();
    final int x = mMoreSuggestionsView.translateX((int)me.getX(index));
    final int y = mMoreSuggestionsView.translateY((int)me.getY(index));
    me.setLocation(x, y);
    if (!mNeedsToTransformTouchEventToHoverEvent) {
        mMoreSuggestionsView.onTouchEvent(me);
        return true;
    }
    // In sliding suggestion mode with accessibility mode on, a touch event should be
    // transformed to a hover event.
    final int width = mMoreSuggestionsView.getWidth();
    final int height = mMoreSuggestionsView.getHeight();
    final boolean onMoreSuggestions = (x >= 0 && x < width && y >= 0 && y < height);
    if (!onMoreSuggestions && !mIsDispatchingHoverEventToMoreSuggestions) {
        // Just drop this touch event because dispatching hover event isn't started yet and
        // the touch event isn't on {@link MoreSuggestionsView}.
        return true;
    }
    final int hoverAction;
    if (onMoreSuggestions && !mIsDispatchingHoverEventToMoreSuggestions) {
        // Transform this touch event to a hover enter event and start dispatching a hover
        // event to {@link MoreSuggestionsView}.
        mIsDispatchingHoverEventToMoreSuggestions = true;
        hoverAction = MotionEvent.ACTION_HOVER_ENTER;
    } else if (me.getActionMasked() == MotionEvent.ACTION_UP) {
        // Transform this touch event to a hover exit event and stop dispatching a hover event
        // after this.
        mIsDispatchingHoverEventToMoreSuggestions = false;
        mNeedsToTransformTouchEventToHoverEvent = false;
        hoverAction = MotionEvent.ACTION_HOVER_EXIT;
    } else {
        // Transform this touch event to a hover move event.
        hoverAction = MotionEvent.ACTION_HOVER_MOVE;
    }
    me.setAction(hoverAction);
    mMoreSuggestionsView.onHoverEvent(me);
    return true;
}
 
源代码15 项目: giraff-android   文件: CardContainer.java
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
	if (mTopCard == null) {
		return false;
	}
	if (mGestureDetector.onTouchEvent(event)) {
		return true;
	}
	final int pointerIndex;
	final float x, y;
	final float dx, dy;
	switch (event.getActionMasked()) {
		case MotionEvent.ACTION_DOWN:
			mTopCard.getHitRect(childRect);

               CardModel cardModel = (CardModel)getAdapter().getItem(0);

               if (cardModel.getOnClickListener() != null) {
                   cardModel.getOnClickListener().onCardClick();
               }
			pointerIndex = event.getActionIndex();
			x = event.getX(pointerIndex);
			y = event.getY(pointerIndex);

			if (!childRect.contains((int) x, (int) y)) {
				return false;
			}

			mLastTouchX = x;
			mLastTouchY = y;
			mActivePointerId = event.getPointerId(pointerIndex);
			break;
		case MotionEvent.ACTION_MOVE:
			pointerIndex = event.findPointerIndex(mActivePointerId);
			x = event.getX(pointerIndex);
			y = event.getY(pointerIndex);
			if (Math.abs(x - mLastTouchX) > mTouchSlop || Math.abs(y - mLastTouchY) > mTouchSlop) {
				float[] points = new float[]{x - mTopCard.getLeft(), y - mTopCard.getTop()};
				mTopCard.getMatrix().invert(mMatrix);
				mMatrix.mapPoints(points);
				mTopCard.setPivotX(points[0]);
				mTopCard.setPivotY(points[1]);
				return true;
			}
	}

	return false;
}
 
源代码16 项目: Android_UE   文件: TouchView1.java
@Override
public boolean onTouchEvent(MotionEvent event) {
    switch (event.getActionMasked()) {
        case MotionEvent.ACTION_DOWN:
            trankId = event.getPointerId(event.getActionIndex());
            downX = event.getX();
            downY = event.getY();
            break;
        case MotionEvent.ACTION_POINTER_DOWN:
            trankId = event.getPointerId(event.getActionIndex());
            int downIndex = event.getActionIndex();
            downX = event.getX(downIndex);
            downY = event.getY(downIndex);
            break;
        case MotionEvent.ACTION_MOVE:
            int moveIndex = event.findPointerIndex(trankId);
            if (moveIndex >= 0) {
                mTranX = event.getX(moveIndex) - downX + mTranX;
                mTranY = event.getY(moveIndex) - downY + mTranY;
                handlerPort();
                invalidate();
                downX = event.getX(moveIndex);
                downY = event.getY(moveIndex);

            }
            break;
        case MotionEvent.ACTION_POINTER_UP:
            // 抬起的是当前的手指
            if (event.getPointerId(event.getActionIndex()) == trankId && event.getPointerCount() > 1) {
                int newIndex;

                if (event.getActionIndex() == event.getPointerCount() - 1 && event.getPointerCount() > 2) {
                    newIndex = event.getActionIndex() - 2;
                } else {
                    newIndex = event.getActionIndex() - 1;
                }

                if (newIndex >= 0) {
                    trankId = event.getPointerId(newIndex);
                    downX = event.getX(newIndex);
                    downY = event.getY(newIndex);
                }
            }

            break;

    }


    return true;
}
 
public void handleInput(MotionEvent event,
                        GameState gameState,
                        ArrayList<Rect> buttons) {

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

    if(!gameState.getPaused()) {
        switch (event.getAction() & MotionEvent.ACTION_MASK) {

            case MotionEvent.ACTION_UP:
                if (buttons.get(HUD.LEFT).contains(x, y)
                        || buttons.get(HUD.RIGHT)
                        .contains(x, y)) {
                    // Player has released either left or right
                    mPlayersTransform.stopHorizontal();
                }
                break;

            case MotionEvent.ACTION_DOWN:
                if (buttons.get(HUD.LEFT).contains(x, y)) {
                    // Player has pressed left
                    mPlayersTransform.headLeft();
                } else if (buttons.get(HUD.RIGHT).contains(x, y)) {
                    // Player has pressed right
                    mPlayersTransform.headRight();
                } else if (buttons.get(HUD.JUMP).contains(x, y)) {
                    // Player has released the jump button
                   mPlayersPlayerTransform.triggerJump();
                }
                break;

            case MotionEvent.ACTION_POINTER_UP:
                if (buttons.get(HUD.LEFT).contains(x, y)
                        || buttons.get(HUD.RIGHT).contains(x, y)) {
                    // Player has released either up or down
                    mPlayersTransform.stopHorizontal();
                }
                break;

            case MotionEvent.ACTION_POINTER_DOWN:
                if (buttons.get(HUD.LEFT).contains(x, y)) {
                    // Player has pressed left
                    mPlayersTransform.headLeft();
                } else if (buttons.get(HUD.RIGHT).contains(x, y)) {
                    // Player has pressed right
                    mPlayersTransform.headRight();
                } else if (buttons.get(HUD.JUMP).contains(x, y)) {
                    // Player has released the jump button
                    mPlayersPlayerTransform.triggerJump();
                }
                break;
        }
    }
}
 
源代码18 项目: J2ME-Loader   文件: Canvas.java
@Override
@SuppressLint("ClickableViewAccessibility")
public boolean onTouchEvent(MotionEvent event) {
	switch (event.getActionMasked()) {
		case MotionEvent.ACTION_DOWN:
			if (overlay != null) {
				overlay.show();
			}
		case MotionEvent.ACTION_POINTER_DOWN:
			int index = event.getActionIndex();
			int id = event.getPointerId(index);
			if ((overlay == null || !overlay.pointerPressed(id, event.getX(index), event.getY(index)))
					&& touchInput && id == 0) {
				Display.postEvent(CanvasEvent.getInstance(Canvas.this, CanvasEvent.POINTER_PRESSED, id,
						convertPointerX(event.getX()), convertPointerY(event.getY())));
			}
			break;
		case MotionEvent.ACTION_MOVE:
			int pointerCount = event.getPointerCount();
			int historySize = event.getHistorySize();
			for (int h = 0; h < historySize; h++) {
				for (int p = 0; p < pointerCount; p++) {
					id = event.getPointerId(p);
					if ((overlay == null || !overlay.pointerDragged(id, event.getHistoricalX(p, h), event.getHistoricalY(p, h)))
							&& touchInput && id == 0) {
						Display.postEvent(CanvasEvent.getInstance(Canvas.this, CanvasEvent.POINTER_DRAGGED, id,
								convertPointerX(event.getHistoricalX(p, h)), convertPointerY(event.getHistoricalY(p, h))));
					}
				}
			}
			for (int p = 0; p < pointerCount; p++) {
				id = event.getPointerId(p);
				if ((overlay == null || !overlay.pointerDragged(id, event.getX(p), event.getY(p)))
						&& touchInput && id == 0) {
					Display.postEvent(CanvasEvent.getInstance(Canvas.this, CanvasEvent.POINTER_DRAGGED, id,
							convertPointerX(event.getX(p)), convertPointerY(event.getY(p))));
				}
			}
			break;
		case MotionEvent.ACTION_UP:
			if (overlay != null) {
				overlay.hide();
			}
		case MotionEvent.ACTION_POINTER_UP:
			index = event.getActionIndex();
			id = event.getPointerId(index);
			if ((overlay == null || !overlay.pointerReleased(id, event.getX(index), event.getY(index)))
					&& touchInput && id == 0) {
				Display.postEvent(CanvasEvent.getInstance(Canvas.this, CanvasEvent.POINTER_RELEASED, id,
						convertPointerX(event.getX()), convertPointerY(event.getY())));
			}
			break;
		default:
			return super.onTouchEvent(event);
	}
	return true;
}
 
源代码19 项目: YetAnotherPixelDungeon   文件: Touchscreen.java
public static void processTouchEvents( ArrayList<MotionEvent> events ) {
	
	int size = events.size();
	for (int i=0; i < size; i++) {
		
		MotionEvent e = events.get( i );
		Touch touch;
		
		switch (e.getAction() & MotionEvent.ACTION_MASK) {
		
		case MotionEvent.ACTION_DOWN:
			touched = true;
			touch = new Touch( e, 0 );
			pointers.put( e.getPointerId( 0 ), touch );
			event.dispatch( touch );
			break;
			
		case MotionEvent.ACTION_POINTER_DOWN:
			int index = e.getActionIndex();
			touch = new Touch( e, index );
			pointers.put( e.getPointerId( index ), touch );
			event.dispatch( touch );
			break;
			
		case MotionEvent.ACTION_MOVE:
			int count = e.getPointerCount();
			for (int j=0; j < count; j++) {		
				pointers.get( e.getPointerId( j ) ).update( e, j );
			}
			event.dispatch( null );
			break;
			
		case MotionEvent.ACTION_POINTER_UP:
			event.dispatch( pointers.remove( e.getPointerId( e.getActionIndex() ) ).up() );
			break;
			
		case MotionEvent.ACTION_UP:
			touched = false;
			event.dispatch( pointers.remove( e.getPointerId( 0 ) ).up() );
			break;
			
		}
		
		e.recycle();
	}
}
 
@Override
public boolean onTouchEvent(
    @NonNull CoordinatorLayout parent, @NonNull V child, @NonNull MotionEvent ev) {
  boolean consumeUp = false;
  switch (ev.getActionMasked()) {
    case MotionEvent.ACTION_MOVE:
      final int activePointerIndex = ev.findPointerIndex(activePointerId);
      if (activePointerIndex == -1) {
        return false;
      }

      final int y = (int) ev.getY(activePointerIndex);
      int dy = lastMotionY - y;
      lastMotionY = y;
      // We're being dragged so scroll the ABL
      scroll(parent, child, dy, getMaxDragOffset(child), 0);
      break;
    case MotionEvent.ACTION_POINTER_UP:
      int newIndex = ev.getActionIndex() == 0 ? 1 : 0;
      activePointerId = ev.getPointerId(newIndex);
      lastMotionY = (int) (ev.getY(newIndex) + 0.5f);
      break;
    case MotionEvent.ACTION_UP:
      if (velocityTracker != null) {
        consumeUp = true;
        velocityTracker.addMovement(ev);
        velocityTracker.computeCurrentVelocity(1000);
        float yvel = velocityTracker.getYVelocity(activePointerId);
        fling(parent, child, -getScrollRangeForDragFling(child), 0, yvel);
      }

      // $FALLTHROUGH
    case MotionEvent.ACTION_CANCEL:
      isBeingDragged = false;
      activePointerId = INVALID_POINTER;
      if (velocityTracker != null) {
        velocityTracker.recycle();
        velocityTracker = null;
      }
      break;
  }

  if (velocityTracker != null) {
    velocityTracker.addMovement(ev);
  }

  return isBeingDragged || consumeUp;
}