protected internal override bool dispatchHoverEvent(android.view.MotionEvent @event ) { // Don't allow children to hover; we want this to be treated as a single component. return(onHoverEvent(@event)); }
internal virtual bool onTouchEvent(android.view.MotionEvent me) { if (mState == STATE_NONE) { return(false); } int action = me.getAction(); if (action == android.view.MotionEvent.ACTION_DOWN) { if (isPointInside(me.getX(), me.getY())) { if (!mList.isInScrollingContainer()) { beginDrag(); return(true); } mInitialTouchY = me.getY(); startPendingDrag(); } } else { if (action == android.view.MotionEvent.ACTION_UP) { // don't add ACTION_CANCEL here if (mPendingDrag) { // Allow a tap to scroll. beginDrag(); int viewHeight = mList.getHeight(); // Jitter int newThumbY = (int)me.getY() - mThumbH + 10; if (newThumbY < 0) { newThumbY = 0; } else { if (newThumbY + mThumbH > viewHeight) { newThumbY = viewHeight - mThumbH; } } mThumbY = newThumbY; scrollTo((float)mThumbY / (viewHeight - mThumbH)); cancelPendingDrag(); } // Will hit the STATE_DRAGGING check below if (mState == STATE_DRAGGING) { if (mList != null) { // ViewGroup does the right thing already, but there might // be other classes that don't properly reset on touch-up, // so do this explicitly just in case. mList.requestDisallowInterceptTouchEvent(false); mList.reportScrollStateChange(android.widget.AbsListView.OnScrollListenerClass.SCROLL_STATE_IDLE ); } setState(STATE_VISIBLE); android.os.Handler handler = mHandler; handler.removeCallbacks(mScrollFade); if (!mAlwaysShow) { handler.postDelayed(mScrollFade, 1000); } mList.invalidate(); return(true); } } else { if (action == android.view.MotionEvent.ACTION_MOVE) { if (mPendingDrag) { float y = me.getY(); if (System.Math.Abs(y - mInitialTouchY) > mScaledTouchSlop) { setState(STATE_DRAGGING); if (mListAdapter == null && mList != null) { getSectionsFromIndexer(); } if (mList != null) { mList.requestDisallowInterceptTouchEvent(true); mList.reportScrollStateChange(android.widget.AbsListView.OnScrollListenerClass.SCROLL_STATE_TOUCH_SCROLL ); } cancelFling(); cancelPendingDrag(); } } // Will hit the STATE_DRAGGING check below if (mState == STATE_DRAGGING) { int viewHeight = mList.getHeight(); // Jitter int newThumbY = (int)me.getY() - mThumbH + 10; if (newThumbY < 0) { newThumbY = 0; } else { if (newThumbY + mThumbH > viewHeight) { newThumbY = viewHeight - mThumbH; } } if (System.Math.Abs(mThumbY - newThumbY) < 2) { return(true); } mThumbY = newThumbY; // If the previous scrollTo is still pending if (mScrollCompleted) { scrollTo((float)mThumbY / (viewHeight - mThumbH)); } return(true); } } else { if (action == android.view.MotionEvent.ACTION_CANCEL) { cancelPendingDrag(); } } } } return(false); }
public virtual void addPointerEvent(android.view.MotionEvent @event) { throw new System.NotImplementedException(); }
public override bool onInterceptTouchEvent(android.view.MotionEvent ev) { return(mIsTransitioning || base.onInterceptTouchEvent(ev)); }
private void setContext(android.view.MotionEvent curr) { if (mCurrEvent != null) { mCurrEvent.recycle(); } mCurrEvent = android.view.MotionEvent.obtain(curr); mCurrLen = -1; mPrevLen = -1; mScaleFactor = -1; android.view.MotionEvent prev = mPrevEvent; int prevIndex0 = prev.findPointerIndex(mActiveId0); int prevIndex1 = prev.findPointerIndex(mActiveId1); int currIndex0 = curr.findPointerIndex(mActiveId0); int currIndex1 = curr.findPointerIndex(mActiveId1); if (prevIndex0 < 0 || prevIndex1 < 0 || currIndex0 < 0 || currIndex1 < 0) { mInvalidGesture = true; android.util.Log.e(TAG, "Invalid MotionEvent stream detected.", new System.Exception ()); if (mGestureInProgress) { mListener.onScaleEnd(this); } return; } float px0 = prev.getX(prevIndex0); float py0 = prev.getY(prevIndex0); float px1 = prev.getX(prevIndex1); float py1 = prev.getY(prevIndex1); float cx0 = curr.getX(currIndex0); float cy0 = curr.getY(currIndex0); float cx1 = curr.getX(currIndex1); float cy1 = curr.getY(currIndex1); float pvx = px1 - px0; float pvy = py1 - py0; float cvx = cx1 - cx0; float cvy = cy1 - cy0; mPrevFingerDiffX = pvx; mPrevFingerDiffY = pvy; mCurrFingerDiffX = cvx; mCurrFingerDiffY = cvy; mFocusX = cx0 + cvx * 0.5f; mFocusY = cy0 + cvy * 0.5f; mTimeDelta = curr.getEventTime() - prev.getEventTime(); mCurrPressure = curr.getPressure(currIndex0) + curr.getPressure(currIndex1); mPrevPressure = prev.getPressure(prevIndex0) + prev.getPressure(prevIndex1); }
public static global::android.view.MotionEvent obtainNoHistory(android.view.MotionEvent arg0) { global::MonoJavaBridge.JNIEnv @__env = global::MonoJavaBridge.JNIEnv.ThreadEnv; return(global::MonoJavaBridge.JavaBridge.WrapJavaObject(@__env.CallStaticObjectMethod(android.view.MotionEvent.staticClass, global::android.view.MotionEvent._obtainNoHistory8937, global::MonoJavaBridge.JavaBridge.ConvertToValue(arg0))) as android.view.MotionEvent); }
public override bool onSingleTapUp(android.view.MotionEvent e) { throw new System.NotImplementedException(); }
void android.view.inputmethod.InputMethodSession.dispatchTrackballEvent(int arg0, android.view.MotionEvent arg1, android.view.inputmethod.InputMethodSession_EventCallback arg2) { global::MonoJavaBridge.JNIEnv @__env = global::MonoJavaBridge.JNIEnv.ThreadEnv; if (!IsClrObject) { @__env.CallVoidMethod(this.JvmHandle, global::android.view.inputmethod.InputMethodSession_._dispatchTrackballEvent10253, global::MonoJavaBridge.JavaBridge.ConvertToValue(arg0), global::MonoJavaBridge.JavaBridge.ConvertToValue(arg1), global::MonoJavaBridge.JavaBridge.ConvertToValue(arg2)); } else { @__env.CallNonVirtualVoidMethod(this.JvmHandle, global::android.view.inputmethod.InputMethodSession_.staticClass, global::android.view.inputmethod.InputMethodSession_._dispatchTrackballEvent10253, global::MonoJavaBridge.JavaBridge.ConvertToValue(arg0), global::MonoJavaBridge.JavaBridge.ConvertToValue(arg1), global::MonoJavaBridge.JavaBridge.ConvertToValue(arg2)); } }
public override bool onTouch(View v, MotionEvent ev) { KeyButton k = (KeyButton) v; try { switch (ev.Action) { case MotionEvent.ACTION_DOWN: if (mService != null && mService.get() != null) { MainActivity.this.mService.get().sendNoteOn(k.Note, k.Velocity); } break; case MotionEvent.ACTION_UP: if (mService != null && mService.get() != null) { MainActivity.this.mService.get().sendNoteOff(k.Note, k.Velocity); } break; } } catch (System.NullReferenceException) { ; } return false; }
bool android.view.GestureDetector.OnDoubleTapListener.onSingleTapConfirmed(android.view.MotionEvent arg0) { global::MonoJavaBridge.JNIEnv @__env = global::MonoJavaBridge.JNIEnv.ThreadEnv; if (!IsClrObject) { return(@__env.CallBooleanMethod(this.JvmHandle, global::android.view.GestureDetector.OnDoubleTapListener_._onSingleTapConfirmed8728, global::MonoJavaBridge.JavaBridge.ConvertToValue(arg0))); } else { return(@__env.CallNonVirtualBooleanMethod(this.JvmHandle, global::android.view.GestureDetector.OnDoubleTapListener_.staticClass, global::android.view.GestureDetector.OnDoubleTapListener_._onSingleTapConfirmed8728, global::MonoJavaBridge.JavaBridge.ConvertToValue(arg0))); } }
public override bool onTouchEvent(android.view.MotionEvent @event) { if (!mIsUserSeekable || !isEnabled()) { return(false); } switch (@event.getAction()) { case android.view.MotionEvent.ACTION_DOWN: { if (isInScrollingContainer()) { mTouchDownX = @event.getX(); } else { setPressed(true); if (mThumb != null) { invalidate(mThumb.getBounds()); } // This may be within the padding region onStartTrackingTouch(); trackTouchEvent(@event); attemptClaimDrag(); } break; } case android.view.MotionEvent.ACTION_MOVE: { if (mIsDragging) { trackTouchEvent(@event); } else { float x = @event.getX(); if (System.Math.Abs(x - mTouchDownX) > mScaledTouchSlop) { setPressed(true); if (mThumb != null) { invalidate(mThumb.getBounds()); } // This may be within the padding region onStartTrackingTouch(); trackTouchEvent(@event); attemptClaimDrag(); } } break; } case android.view.MotionEvent.ACTION_UP: { if (mIsDragging) { trackTouchEvent(@event); onStopTrackingTouch(); setPressed(false); } else { // Touch up when we never crossed the touch slop threshold should // be interpreted as a tap-seek to that location. onStartTrackingTouch(); trackTouchEvent(@event); onStopTrackingTouch(); } // ProgressBar doesn't know to repaint the thumb drawable // in its inactive state when the touch stops (because the // value has not apparently changed) invalidate(); break; } case android.view.MotionEvent.ACTION_CANCEL: { if (mIsDragging) { onStopTrackingTouch(); setPressed(false); } invalidate(); // see above explanation break; } } return(true); }
bool android.view.GestureDetector.OnGestureListener.onFling(android.view.MotionEvent arg0, android.view.MotionEvent arg1, float arg2, float arg3) { global::MonoJavaBridge.JNIEnv @__env = global::MonoJavaBridge.JNIEnv.ThreadEnv; if (!IsClrObject) { return(@__env.CallBooleanMethod(this.JvmHandle, global::android.view.GestureDetector.OnGestureListener_._onFling8734, global::MonoJavaBridge.JavaBridge.ConvertToValue(arg0), global::MonoJavaBridge.JavaBridge.ConvertToValue(arg1), global::MonoJavaBridge.JavaBridge.ConvertToValue(arg2), global::MonoJavaBridge.JavaBridge.ConvertToValue(arg3))); } else { return(@__env.CallNonVirtualBooleanMethod(this.JvmHandle, global::android.view.GestureDetector.OnGestureListener_.staticClass, global::android.view.GestureDetector.OnGestureListener_._onFling8734, global::MonoJavaBridge.JavaBridge.ConvertToValue(arg0), global::MonoJavaBridge.JavaBridge.ConvertToValue(arg1), global::MonoJavaBridge.JavaBridge.ConvertToValue(arg2), global::MonoJavaBridge.JavaBridge.ConvertToValue(arg3))); } }
public override bool onTrackballEvent(android.view.MotionEvent ev) { throw new System.NotImplementedException(); }
public override void dispatchTrackballEvent(int seq, android.view.MotionEvent @event , [email protected] callback) { throw new System.NotImplementedException(); }
public override bool onTouchEvent(android.view.MotionEvent @event) { throw new System.NotImplementedException(); }
/// <summary>Checks a trackball event.</summary> /// <remarks>Checks a trackball event.</remarks> /// <param name="event">The event.</param> /// <param name="nestingLevel"> /// The nesting level: 0 if called from the base class, /// or 1 from a subclass. If the event was already checked by this consistency verifier /// at a higher nesting level, it will not be checked again. Used to handle the situation /// where a subclass dispatching method delegates to its superclass's dispatching method /// and both dispatching methods call into the consistency verifier. /// </param> public void onTrackballEvent(android.view.MotionEvent @event, int nestingLevel) { if (!startEvent(@event, nestingLevel, EVENT_TYPE_TRACKBALL)) { return; } try { ensureMetaStateIsNormalized(@event.getMetaState()); int action = @event.getAction(); int source = @event.getSource(); if ((source & android.view.InputDevice.SOURCE_CLASS_TRACKBALL) != 0) { switch (action) { case android.view.MotionEvent.ACTION_DOWN: { if (mTrackballDown && !mTrackballUnhandled) { problem("ACTION_DOWN but trackball is already down."); } else { mTrackballDown = true; mTrackballUnhandled = false; } ensureHistorySizeIsZeroForThisAction(@event); ensurePointerCountIsOneForThisAction(@event); break; } case android.view.MotionEvent.ACTION_UP: { if (!mTrackballDown) { problem("ACTION_UP but trackball is not down."); } else { mTrackballDown = false; mTrackballUnhandled = false; } ensureHistorySizeIsZeroForThisAction(@event); ensurePointerCountIsOneForThisAction(@event); break; } case android.view.MotionEvent.ACTION_MOVE: { ensurePointerCountIsOneForThisAction(@event); break; } default: { problem("Invalid action " + android.view.MotionEvent.actionToString(action) + " for trackball event." ); break; } } if (mTrackballDown && @event.getPressure() <= 0) { problem("Trackball is down but pressure is not greater than 0."); } else { if (!mTrackballDown && @event.getPressure() != 0) { problem("Trackball is up but pressure is not equal to 0."); } } } else { problem("Source was not SOURCE_CLASS_TRACKBALL."); } } finally { finishEvent(); } }
public virtual void dispatchTrackballEvent(int seq, android.view.MotionEvent @event , android.view.inputmethod.InputMethodSessionClass.EventCallback callback) { throw new System.NotImplementedException(); }
/// <summary>Checks a touch event.</summary> /// <remarks>Checks a touch event.</remarks> /// <param name="event">The event.</param> /// <param name="nestingLevel"> /// The nesting level: 0 if called from the base class, /// or 1 from a subclass. If the event was already checked by this consistency verifier /// at a higher nesting level, it will not be checked again. Used to handle the situation /// where a subclass dispatching method delegates to its superclass's dispatching method /// and both dispatching methods call into the consistency verifier. /// </param> public void onTouchEvent(android.view.MotionEvent @event, int nestingLevel) { if (!startEvent(@event, nestingLevel, EVENT_TYPE_TOUCH)) { return; } int action = @event.getAction(); bool newStream = action == android.view.MotionEvent.ACTION_DOWN || action == android.view.MotionEvent .ACTION_CANCEL; if (newStream && (mTouchEventStreamIsTainted || mTouchEventStreamUnhandled)) { mTouchEventStreamIsTainted = false; mTouchEventStreamUnhandled = false; mTouchEventStreamPointers = 0; } if (mTouchEventStreamIsTainted) { @event.setTainted(true); } try { ensureMetaStateIsNormalized(@event.getMetaState()); int deviceId = @event.getDeviceId(); int source = @event.getSource(); if (!newStream && mTouchEventStreamDeviceId != -1 && (mTouchEventStreamDeviceId != deviceId || mTouchEventStreamSource != source)) { problem("Touch event stream contains events from multiple sources: " + "previous device id " + mTouchEventStreamDeviceId + ", previous source " + Sharpen.Util.IntToHexString (mTouchEventStreamSource) + ", new device id " + deviceId + ", new source " + Sharpen.Util.IntToHexString (source)); } mTouchEventStreamDeviceId = deviceId; mTouchEventStreamSource = source; int pointerCount = @event.getPointerCount(); if ((source & android.view.InputDevice.SOURCE_CLASS_POINTER) != 0) { switch (action) { case android.view.MotionEvent.ACTION_DOWN: { if (mTouchEventStreamPointers != 0) { problem("ACTION_DOWN but pointers are already down. " + "Probably missing ACTION_UP from previous gesture." ); } ensureHistorySizeIsZeroForThisAction(@event); ensurePointerCountIsOneForThisAction(@event); mTouchEventStreamPointers = 1 << @event.getPointerId(0); break; } case android.view.MotionEvent.ACTION_UP: { ensureHistorySizeIsZeroForThisAction(@event); ensurePointerCountIsOneForThisAction(@event); mTouchEventStreamPointers = 0; mTouchEventStreamIsTainted = false; break; } case android.view.MotionEvent.ACTION_MOVE: { int expectedPointerCount = Sharpen.Util.IntGetBitCount(mTouchEventStreamPointers); if (pointerCount != expectedPointerCount) { problem("ACTION_MOVE contained " + pointerCount + " pointers but there are currently " + expectedPointerCount + " pointers down."); mTouchEventStreamIsTainted = true; } break; } case android.view.MotionEvent.ACTION_CANCEL: { mTouchEventStreamPointers = 0; mTouchEventStreamIsTainted = false; break; } case android.view.MotionEvent.ACTION_OUTSIDE: { if (mTouchEventStreamPointers != 0) { problem("ACTION_OUTSIDE but pointers are still down."); } ensureHistorySizeIsZeroForThisAction(@event); ensurePointerCountIsOneForThisAction(@event); mTouchEventStreamIsTainted = false; break; } default: { int actionMasked = @event.getActionMasked(); int actionIndex = @event.getActionIndex(); if (actionMasked == android.view.MotionEvent.ACTION_POINTER_DOWN) { if (mTouchEventStreamPointers == 0) { problem("ACTION_POINTER_DOWN but no other pointers were down."); mTouchEventStreamIsTainted = true; } if (actionIndex < 0 || actionIndex >= pointerCount) { problem("ACTION_POINTER_DOWN index is " + actionIndex + " but the pointer count is " + pointerCount + "."); mTouchEventStreamIsTainted = true; } else { int id = @event.getPointerId(actionIndex); int idBit = 1 << id; if ((mTouchEventStreamPointers & idBit) != 0) { problem("ACTION_POINTER_DOWN specified pointer id " + id + " which is already down." ); mTouchEventStreamIsTainted = true; } else { mTouchEventStreamPointers |= idBit; } } ensureHistorySizeIsZeroForThisAction(@event); } else { if (actionMasked == android.view.MotionEvent.ACTION_POINTER_UP) { if (actionIndex < 0 || actionIndex >= pointerCount) { problem("ACTION_POINTER_UP index is " + actionIndex + " but the pointer count is " + pointerCount + "."); mTouchEventStreamIsTainted = true; } else { int id = @event.getPointerId(actionIndex); int idBit = 1 << id; if ((mTouchEventStreamPointers & idBit) == 0) { problem("ACTION_POINTER_UP specified pointer id " + id + " which is not currently down." ); mTouchEventStreamIsTainted = true; } else { mTouchEventStreamPointers &= ~idBit; } } ensureHistorySizeIsZeroForThisAction(@event); } else { problem("Invalid action " + android.view.MotionEvent.actionToString(action) + " for touch event." ); } } break; } } } else { problem("Source was not SOURCE_CLASS_POINTER."); } } finally { finishEvent(); } }
public virtual bool onTouch(android.view.View v, android.view.MotionEvent @event) { throw new System.NotImplementedException(); }
/// <summary>Checks a generic motion event.</summary> /// <remarks>Checks a generic motion event.</remarks> /// <param name="event">The event.</param> /// <param name="nestingLevel"> /// The nesting level: 0 if called from the base class, /// or 1 from a subclass. If the event was already checked by this consistency verifier /// at a higher nesting level, it will not be checked again. Used to handle the situation /// where a subclass dispatching method delegates to its superclass's dispatching method /// and both dispatching methods call into the consistency verifier. /// </param> public void onGenericMotionEvent(android.view.MotionEvent @event, int nestingLevel ) { if (!startEvent(@event, nestingLevel, EVENT_TYPE_GENERIC_MOTION)) { return; } try { ensureMetaStateIsNormalized(@event.getMetaState()); int action = @event.getAction(); int source = @event.getSource(); if ((source & android.view.InputDevice.SOURCE_CLASS_POINTER) != 0) { switch (action) { case android.view.MotionEvent.ACTION_HOVER_ENTER: { ensurePointerCountIsOneForThisAction(@event); mHoverEntered = true; break; } case android.view.MotionEvent.ACTION_HOVER_MOVE: { ensurePointerCountIsOneForThisAction(@event); break; } case android.view.MotionEvent.ACTION_HOVER_EXIT: { ensurePointerCountIsOneForThisAction(@event); if (!mHoverEntered) { problem("ACTION_HOVER_EXIT without prior ACTION_HOVER_ENTER"); } mHoverEntered = false; break; } case android.view.MotionEvent.ACTION_SCROLL: { ensureHistorySizeIsZeroForThisAction(@event); ensurePointerCountIsOneForThisAction(@event); break; } default: { problem("Invalid action for generic pointer event."); break; } } } else { if ((source & android.view.InputDevice.SOURCE_CLASS_JOYSTICK) != 0) { switch (action) { case android.view.MotionEvent.ACTION_MOVE: { ensurePointerCountIsOneForThisAction(@event); break; } default: { problem("Invalid action for generic joystick event."); break; } } } } } finally { finishEvent(); } }
public override bool onHoverEvent(android.view.MotionEvent ev) { base.onHoverEvent(ev); // An action bar always eats hover events. return(true); }
public static bool onTouchEvent(android.widget.TextView arg0, android.text.Spannable arg1, android.view.MotionEvent arg2) { global::MonoJavaBridge.JNIEnv @__env = global::MonoJavaBridge.JNIEnv.ThreadEnv; return(@__env.CallStaticBooleanMethod(android.text.method.Touch.staticClass, global::android.text.method.Touch._onTouchEvent8194, global::MonoJavaBridge.JavaBridge.ConvertToValue(arg0), global::MonoJavaBridge.JavaBridge.ConvertToValue(arg1), global::MonoJavaBridge.JavaBridge.ConvertToValue(arg2))); }
public virtual bool onTouchEvent(android.view.MotionEvent @event) { if (mInputEventConsistencyVerifier != null) { mInputEventConsistencyVerifier.onTouchEvent(@event, 0); } int action = @event.getActionMasked(); if (action == android.view.MotionEvent.ACTION_DOWN) { reset(); } // Start fresh bool handled = true; if (mInvalidGesture) { handled = false; } else { if (!mGestureInProgress) { switch (action) { case android.view.MotionEvent.ACTION_DOWN: { mActiveId0 = @event.getPointerId(0); mActive0MostRecent = true; break; } case android.view.MotionEvent.ACTION_UP: { reset(); break; } case android.view.MotionEvent.ACTION_POINTER_DOWN: { // We have a new multi-finger gesture // as orientation can change, query the metrics in touch down android.util.DisplayMetrics metrics = mContext.getResources().getDisplayMetrics(); mRightSlopEdge = metrics.widthPixels - mEdgeSlop; mBottomSlopEdge = metrics.heightPixels - mEdgeSlop; if (mPrevEvent != null) { mPrevEvent.recycle(); } mPrevEvent = android.view.MotionEvent.obtain(@event); mTimeDelta = 0; int index1 = @event.getActionIndex(); int index0 = @event.findPointerIndex(mActiveId0); mActiveId1 = @event.getPointerId(index1); if (index0 < 0 || index0 == index1) { // Probably someone sending us a broken event stream. index0 = findNewActiveIndex(@event, index0 == index1 ? -1 : mActiveId1, index0); mActiveId0 = @event.getPointerId(index0); } mActive0MostRecent = false; setContext(@event); // Check if we have a sloppy gesture. If so, delay // the beginning of the gesture until we're sure that's // what the user wanted. Sloppy gestures can happen if the // edge of the user's hand is touching the screen, for example. float edgeSlop = mEdgeSlop; float rightSlop = mRightSlopEdge; float bottomSlop = mBottomSlopEdge; float x0 = getRawX(@event, index0); float y0 = getRawY(@event, index0); float x1 = getRawX(@event, index1); float y1 = getRawY(@event, index1); bool p0sloppy = x0 < edgeSlop || y0 < edgeSlop || x0 > rightSlop || y0 > bottomSlop; bool p1sloppy = x1 < edgeSlop || y1 < edgeSlop || x1 > rightSlop || y1 > bottomSlop; if (p0sloppy && p1sloppy) { mFocusX = -1; mFocusY = -1; mSloppyGesture = true; } else { if (p0sloppy) { mFocusX = @event.getX(index1); mFocusY = @event.getY(index1); mSloppyGesture = true; } else { if (p1sloppy) { mFocusX = @event.getX(index0); mFocusY = @event.getY(index0); mSloppyGesture = true; } else { mSloppyGesture = false; mGestureInProgress = mListener.onScaleBegin(this); } } } break; } case android.view.MotionEvent.ACTION_MOVE: { if (mSloppyGesture) { // Initiate sloppy gestures if we've moved outside of the slop area. float edgeSlop = mEdgeSlop; float rightSlop = mRightSlopEdge; float bottomSlop = mBottomSlopEdge; int index0 = @event.findPointerIndex(mActiveId0); int index1 = @event.findPointerIndex(mActiveId1); float x0 = getRawX(@event, index0); float y0 = getRawY(@event, index0); float x1 = getRawX(@event, index1); float y1 = getRawY(@event, index1); bool p0sloppy = x0 < edgeSlop || y0 < edgeSlop || x0 > rightSlop || y0 > bottomSlop; bool p1sloppy = x1 < edgeSlop || y1 < edgeSlop || x1 > rightSlop || y1 > bottomSlop; if (p0sloppy) { // Do we have a different pointer that isn't sloppy? int index = findNewActiveIndex(@event, mActiveId1, index0); if (index >= 0) { index0 = index; mActiveId0 = @event.getPointerId(index); x0 = getRawX(@event, index); y0 = getRawY(@event, index); p0sloppy = false; } } if (p1sloppy) { // Do we have a different pointer that isn't sloppy? int index = findNewActiveIndex(@event, mActiveId0, index1); if (index >= 0) { index1 = index; mActiveId1 = @event.getPointerId(index); x1 = getRawX(@event, index); y1 = getRawY(@event, index); p1sloppy = false; } } if (p0sloppy && p1sloppy) { mFocusX = -1; mFocusY = -1; } else { if (p0sloppy) { mFocusX = @event.getX(index1); mFocusY = @event.getY(index1); } else { if (p1sloppy) { mFocusX = @event.getX(index0); mFocusY = @event.getY(index0); } else { mSloppyGesture = false; mGestureInProgress = mListener.onScaleBegin(this); } } } } break; } case android.view.MotionEvent.ACTION_POINTER_UP: { if (mSloppyGesture) { int pointerCount = @event.getPointerCount(); int actionIndex = @event.getActionIndex(); int actionId = @event.getPointerId(actionIndex); if (pointerCount > 2) { if (actionId == mActiveId0) { int newIndex = findNewActiveIndex(@event, mActiveId1, actionIndex); if (newIndex >= 0) { mActiveId0 = @event.getPointerId(newIndex); } } else { if (actionId == mActiveId1) { int newIndex = findNewActiveIndex(@event, mActiveId0, actionIndex); if (newIndex >= 0) { mActiveId1 = @event.getPointerId(newIndex); } } } } else { // Set focus point to the remaining finger int index = @event.findPointerIndex(actionId == mActiveId0 ? mActiveId1 : mActiveId0 ); if (index < 0) { mInvalidGesture = true; android.util.Log.e(TAG, "Invalid MotionEvent stream detected.", new System.Exception ()); if (mGestureInProgress) { mListener.onScaleEnd(this); } return false; } mActiveId0 = @event.getPointerId(index); mActive0MostRecent = true; mActiveId1 = -1; mFocusX = @event.getX(index); mFocusY = @event.getY(index); } } break; } } } else { switch (action) { case android.view.MotionEvent.ACTION_POINTER_DOWN: { // Transform gesture in progress - attempt to handle it // End the old gesture and begin a new one with the most recent two fingers. mListener.onScaleEnd(this); int oldActive0 = mActiveId0; int oldActive1 = mActiveId1; reset(); mPrevEvent = android.view.MotionEvent.obtain(@event); mActiveId0 = mActive0MostRecent ? oldActive0 : oldActive1; mActiveId1 = @event.getPointerId(@event.getActionIndex()); mActive0MostRecent = false; int index0 = @event.findPointerIndex(mActiveId0); if (index0 < 0 || mActiveId0 == mActiveId1) { // Probably someone sending us a broken event stream. android.util.Log.e(TAG, "Got " + android.view.MotionEvent.actionToString(action) + " with bad state while a gesture was in progress. " + "Did you forget to pass an event to " + "ScaleGestureDetector#onTouchEvent?"); index0 = findNewActiveIndex(@event, mActiveId0 == mActiveId1 ? -1 : mActiveId1, index0 ); mActiveId0 = @event.getPointerId(index0); } setContext(@event); mGestureInProgress = mListener.onScaleBegin(this); break; } case android.view.MotionEvent.ACTION_POINTER_UP: { int pointerCount = @event.getPointerCount(); int actionIndex = @event.getActionIndex(); int actionId = @event.getPointerId(actionIndex); bool gestureEnded = false; if (pointerCount > 2) { if (actionId == mActiveId0) { int newIndex = findNewActiveIndex(@event, mActiveId1, actionIndex); if (newIndex >= 0) { mListener.onScaleEnd(this); mActiveId0 = @event.getPointerId(newIndex); mActive0MostRecent = true; mPrevEvent = android.view.MotionEvent.obtain(@event); setContext(@event); mGestureInProgress = mListener.onScaleBegin(this); } else { gestureEnded = true; } } else { if (actionId == mActiveId1) { int newIndex = findNewActiveIndex(@event, mActiveId0, actionIndex); if (newIndex >= 0) { mListener.onScaleEnd(this); mActiveId1 = @event.getPointerId(newIndex); mActive0MostRecent = false; mPrevEvent = android.view.MotionEvent.obtain(@event); setContext(@event); mGestureInProgress = mListener.onScaleBegin(this); } else { gestureEnded = true; } } } mPrevEvent.recycle(); mPrevEvent = android.view.MotionEvent.obtain(@event); setContext(@event); } else { gestureEnded = true; } if (gestureEnded) { // Gesture ended setContext(@event); // Set focus point to the remaining finger int activeId = actionId == mActiveId0 ? mActiveId1 : mActiveId0; int index = @event.findPointerIndex(activeId); mFocusX = @event.getX(index); mFocusY = @event.getY(index); mListener.onScaleEnd(this); reset(); mActiveId0 = activeId; mActive0MostRecent = true; } break; } case android.view.MotionEvent.ACTION_CANCEL: { mListener.onScaleEnd(this); reset(); break; } case android.view.MotionEvent.ACTION_UP: { reset(); break; } case android.view.MotionEvent.ACTION_MOVE: { setContext(@event); // Only accept the event if our relative pressure is within // a certain limit - this can help filter shaky data as a // finger is lifted. if (mCurrPressure / mPrevPressure > PRESSURE_THRESHOLD) { bool updatePrevious = mListener.onScale(this); if (updatePrevious) { mPrevEvent.recycle(); mPrevEvent = android.view.MotionEvent.obtain(@event); } } break; } } } } if (!handled && mInputEventConsistencyVerifier != null) { mInputEventConsistencyVerifier.onUnhandledEvent(@event, 0); } return handled; }
public override bool dispatchTouchEvent(android.view.MotionEvent ev) { throw new System.NotImplementedException(); }
private void reset() { if (mPrevEvent != null) { mPrevEvent.recycle(); mPrevEvent = null; } if (mCurrEvent != null) { mCurrEvent.recycle(); mCurrEvent = null; } mSloppyGesture = false; mGestureInProgress = false; mActiveId0 = -1; mActiveId1 = -1; mInvalidGesture = false; }
public virtual bool onTrackballEvent(android.widget.TextView arg0, android.text.Spannable arg1, android.view.MotionEvent arg2) { global::MonoJavaBridge.JNIEnv @__env = global::MonoJavaBridge.JNIEnv.ThreadEnv; if (!IsClrObject) { return(@__env.CallBooleanMethod(this.JvmHandle, global::android.text.method.ArrowKeyMovementMethod._onTrackballEvent8032, global::MonoJavaBridge.JavaBridge.ConvertToValue(arg0), global::MonoJavaBridge.JavaBridge.ConvertToValue(arg1), global::MonoJavaBridge.JavaBridge.ConvertToValue(arg2))); } else { return(@__env.CallNonVirtualBooleanMethod(this.JvmHandle, global::android.text.method.ArrowKeyMovementMethod.staticClass, global::android.text.method.ArrowKeyMovementMethod._onTrackballEvent8032, global::MonoJavaBridge.JavaBridge.ConvertToValue(arg0), global::MonoJavaBridge.JavaBridge.ConvertToValue(arg1), global::MonoJavaBridge.JavaBridge.ConvertToValue(arg2))); } }
private void logMotionEvent(string type, android.view.MotionEvent @event) { throw new System.NotImplementedException(); }
/// <summary>Translate the motion event captured on screen to the application's window. /// </summary> /// <remarks>Translate the motion event captured on screen to the application's window. /// </remarks> public virtual void translateEventInScreenToAppWindow(android.view.MotionEvent @event ) { @event.scale(this.applicationInvertedScale); }
public override bool onTouchEvent(android.view.MotionEvent @event) { return(true); }
private bool isOutOfBounds(android.view.View v, android.view.MotionEvent @event) { throw new System.NotImplementedException(); }
public override bool onTouchEvent(android.view.MotionEvent ev) { mVelocityTracker.addMovement(ev); int action = ev.getActionMasked(); switch (action) { case android.view.MotionEvent.ACTION_DOWN: { float x = ev.getX(); float y = ev.getY(); if (isEnabled() && hitThumb(x, y)) { mTouchMode = TOUCH_MODE_DOWN; mTouchX = x; mTouchY = y; } break; } case android.view.MotionEvent.ACTION_MOVE: { switch (mTouchMode) { case TOUCH_MODE_IDLE: { // Didn't target the thumb, treat normally. break; } case TOUCH_MODE_DOWN: { float x = ev.getX(); float y = ev.getY(); if (System.Math.Abs(x - mTouchX) > mTouchSlop || System.Math.Abs(y - mTouchY) > mTouchSlop) { mTouchMode = TOUCH_MODE_DRAGGING; getParent().requestDisallowInterceptTouchEvent(true); mTouchX = x; mTouchY = y; return(true); } break; } case TOUCH_MODE_DRAGGING: { float x = ev.getX(); float dx = x - mTouchX; float newPos = System.Math.Max(0, System.Math.Min(mThumbPosition + dx, getThumbScrollRange ())); if (newPos != mThumbPosition) { mThumbPosition = newPos; mTouchX = x; invalidate(); } return(true); } } break; } case android.view.MotionEvent.ACTION_UP: case android.view.MotionEvent.ACTION_CANCEL: { if (mTouchMode == TOUCH_MODE_DRAGGING) { stopDrag(ev); return(true); } mTouchMode = TOUCH_MODE_IDLE; mVelocityTracker.clear(); break; } } return(base.onTouchEvent(ev)); }
public override bool onTouchEvent(android.widget.TextView widget, android.text.Spannable buffer, android.view.MotionEvent @event) { throw new System.NotImplementedException(); }
//JAVA TO C# CONVERTER WARNING: 'final' parameters are not available in .NET: //ORIGINAL LINE: @Override public boolean onTouchEvent(final android.view.MotionEvent event) public override bool onTouchEvent(MotionEvent @event) { bool handled = false; OfficeThing touchedThing; int xTouchLogical; int yTouchLogical; int pointerId; int actionIndex = @event.ActionIndex; // get touch event coordinates and make transparent wrapper from it switch (@event.ActionMasked) { case MotionEvent.ACTION_DOWN: // first pointer, clear the pointer mSelectedThing = null; xTouchLogical = screenToModel((int)@event.getX(0)); yTouchLogical = screenToModel((int)@event.getY(0)); // check if we've touched inside something touchedThing = getTouchedThing(xTouchLogical, yTouchLogical); if (touchedThing == null) { mSelectedThingChangeListener.thingChanged(null); break; } mSelectedThing = touchedThing; if (null != mSelectedThingChangeListener) { mSelectedThingChangeListener.thingChanged(touchedThing); } touchedThing.setzIndex(mOfficeLayout.HighestzIndex + 1); Log.v(TAG, "Selected " + touchedThing); handled = true; break; case MotionEvent.ACTION_MOVE: pointerId = @event.getPointerId(actionIndex); if (pointerId > 0) { break; } xTouchLogical = screenToModel((int)@event.getX(actionIndex)); yTouchLogical = screenToModel((int)@event.getY(actionIndex)); touchedThing = mSelectedThing; if (null == touchedThing) { break; } moveThing(touchedThing, xTouchLogical, yTouchLogical); handled = true; break; case MotionEvent.ACTION_UP: mSelectedThing = null; invalidate(); handled = true; break; case MotionEvent.ACTION_CANCEL: handled = true; break; } return(base.onTouchEvent(@event) || handled); }
private void handleActionDown(android.view.MotionEvent @event) { throw new System.NotImplementedException(); }
//JAVA TO C# CONVERTER WARNING: 'final' parameters are not available in .NET: //ORIGINAL LINE: @Override public boolean onTouchEvent(final android.view.MotionEvent event) public override bool onTouchEvent(MotionEvent @event) { bool handled = false; OfficeThing touchedThing; int xTouchLogical; int yTouchLogical; int pointerId; int actionIndex = @event.ActionIndex; // get touch event coordinates and make transparent wrapper from it switch (@event.ActionMasked) { case MotionEvent.ACTION_DOWN: // first pointer, clear the pointer mSelectedThing = null; xTouchLogical = screenToModel((int) @event.getX(0)); yTouchLogical = screenToModel((int) @event.getY(0)); // check if we've touched inside something touchedThing = getTouchedThing(xTouchLogical, yTouchLogical); if (touchedThing == null) { mSelectedThingChangeListener.thingChanged(null); break; } mSelectedThing = touchedThing; if (null != mSelectedThingChangeListener) { mSelectedThingChangeListener.thingChanged(touchedThing); } touchedThing.setzIndex(mOfficeLayout.HighestzIndex + 1); Log.v(TAG, "Selected " + touchedThing); handled = true; break; case MotionEvent.ACTION_MOVE: pointerId = @event.getPointerId(actionIndex); if (pointerId > 0) { break; } xTouchLogical = screenToModel((int) @event.getX(actionIndex)); yTouchLogical = screenToModel((int) @event.getY(actionIndex)); touchedThing = mSelectedThing; if (null == touchedThing) { break; } moveThing(touchedThing, xTouchLogical, yTouchLogical); handled = true; break; case MotionEvent.ACTION_UP: mSelectedThing = null; invalidate(); handled = true; break; case MotionEvent.ACTION_CANCEL: handled = true; break; } return base.onTouchEvent(@event) || handled; }
/// <summary> /// Analyzes the given motion event and if applicable triggers the /// appropriate callbacks on the /// <see cref="OnGestureListener">OnGestureListener</see> /// supplied. /// </summary> /// <param name="ev">The current motion event.</param> /// <returns> /// true if the /// <see cref="OnGestureListener">OnGestureListener</see> /// consumed the event, /// else false. /// </returns> public virtual bool onTouchEvent(android.view.MotionEvent ev) { if (mInputEventConsistencyVerifier != null) { mInputEventConsistencyVerifier.onTouchEvent(ev, 0); } int action = ev.getAction(); float y = ev.getY(); float x = ev.getX(); if (mVelocityTracker == null) { mVelocityTracker = android.view.VelocityTracker.obtain(); } mVelocityTracker.addMovement(ev); bool handled = false; switch (action & android.view.MotionEvent.ACTION_MASK) { case android.view.MotionEvent.ACTION_POINTER_DOWN: { if (mIgnoreMultitouch) { // Multitouch event - abort. cancel(); } break; } case android.view.MotionEvent.ACTION_POINTER_UP: { // Ending a multitouch gesture and going back to 1 finger if (mIgnoreMultitouch && ev.getPointerCount() == 2) { int index = (((action & android.view.MotionEvent.ACTION_POINTER_INDEX_MASK) >> android.view.MotionEvent .ACTION_POINTER_INDEX_SHIFT) == 0) ? 1 : 0; mLastMotionX = ev.getX(index); mLastMotionY = ev.getY(index); mVelocityTracker.recycle(); mVelocityTracker = android.view.VelocityTracker.obtain(); } break; } case android.view.MotionEvent.ACTION_DOWN: { if (mDoubleTapListener != null) { bool hadTapMessage = mHandler.hasMessages(TAP); if (hadTapMessage) { mHandler.removeMessages(TAP); } if ((mCurrentDownEvent != null) && (mPreviousUpEvent != null) && hadTapMessage && isConsideredDoubleTap(mCurrentDownEvent, mPreviousUpEvent, ev)) { // This is a second tap mIsDoubleTapping = true; // Give a callback with the first tap of the double-tap handled |= mDoubleTapListener.onDoubleTap(mCurrentDownEvent); // Give a callback with down event of the double-tap handled |= mDoubleTapListener.onDoubleTapEvent(ev); } else { // This is a first tap mHandler.sendEmptyMessageDelayed(TAP, DOUBLE_TAP_TIMEOUT); } } mLastMotionX = x; mLastMotionY = y; if (mCurrentDownEvent != null) { mCurrentDownEvent.recycle(); } mCurrentDownEvent = android.view.MotionEvent.obtain(ev); mAlwaysInTapRegion = true; mAlwaysInBiggerTapRegion = true; mStillDown = true; mInLongPress = false; if (mIsLongpressEnabled) { mHandler.removeMessages(LONG_PRESS); mHandler.sendEmptyMessageAtTime(LONG_PRESS, mCurrentDownEvent.getDownTime() + TAP_TIMEOUT + LONGPRESS_TIMEOUT); } mHandler.sendEmptyMessageAtTime(SHOW_PRESS, mCurrentDownEvent.getDownTime() + TAP_TIMEOUT ); handled |= mListener.onDown(ev); break; } case android.view.MotionEvent.ACTION_MOVE: { if (mInLongPress || (mIgnoreMultitouch && ev.getPointerCount() > 1)) { break; } float scrollX = mLastMotionX - x; float scrollY = mLastMotionY - y; if (mIsDoubleTapping) { // Give the move events of the double-tap handled |= mDoubleTapListener.onDoubleTapEvent(ev); } else { if (mAlwaysInTapRegion) { int deltaX = (int)(x - mCurrentDownEvent.getX()); int deltaY = (int)(y - mCurrentDownEvent.getY()); int distance = (deltaX * deltaX) + (deltaY * deltaY); if (distance > mTouchSlopSquare) { handled = mListener.onScroll(mCurrentDownEvent, ev, scrollX, scrollY); mLastMotionX = x; mLastMotionY = y; mAlwaysInTapRegion = false; mHandler.removeMessages(TAP); mHandler.removeMessages(SHOW_PRESS); mHandler.removeMessages(LONG_PRESS); } if (distance > mBiggerTouchSlopSquare) { mAlwaysInBiggerTapRegion = false; } } else { if ((System.Math.Abs(scrollX) >= 1) || (System.Math.Abs(scrollY) >= 1)) { handled = mListener.onScroll(mCurrentDownEvent, ev, scrollX, scrollY); mLastMotionX = x; mLastMotionY = y; } } } break; } case android.view.MotionEvent.ACTION_UP: { mStillDown = false; android.view.MotionEvent currentUpEvent = android.view.MotionEvent.obtain(ev); if (mIsDoubleTapping) { // Finally, give the up event of the double-tap handled |= mDoubleTapListener.onDoubleTapEvent(ev); } else { if (mInLongPress) { mHandler.removeMessages(TAP); mInLongPress = false; } else { if (mAlwaysInTapRegion) { handled = mListener.onSingleTapUp(ev); } else { // A fling must travel the minimum tap distance android.view.VelocityTracker velocityTracker = mVelocityTracker; velocityTracker.computeCurrentVelocity(1000, mMaximumFlingVelocity); float velocityY = velocityTracker.getYVelocity(); float velocityX = velocityTracker.getXVelocity(); if ((System.Math.Abs(velocityY) > mMinimumFlingVelocity) || (System.Math.Abs(velocityX ) > mMinimumFlingVelocity)) { handled = mListener.onFling(mCurrentDownEvent, ev, velocityX, velocityY); } } } } if (mPreviousUpEvent != null) { mPreviousUpEvent.recycle(); } // Hold the event we obtained above - listeners may have changed the original. mPreviousUpEvent = currentUpEvent; mVelocityTracker.recycle(); mVelocityTracker = null; mIsDoubleTapping = false; mHandler.removeMessages(SHOW_PRESS); mHandler.removeMessages(LONG_PRESS); break; } case android.view.MotionEvent.ACTION_CANCEL: { cancel(); break; } } if (!handled && mInputEventConsistencyVerifier != null) { mInputEventConsistencyVerifier.onUnhandledEvent(ev, 0); } return handled; }