// Touch events @Override public boolean onTouch(View v, MotionEvent event) { final int touchDevId = event.getDeviceId(); final int pointerCount = event.getPointerCount(); // touchId, pointerId, action, x, y, pressure int actionPointerIndex = (event.getAction() & MotionEvent.ACTION_POINTER_ID_MASK) >> MotionEvent.ACTION_POINTER_ID_SHIFT; /* API 8: event.getActionIndex(); */ int pointerFingerId = event.getPointerId(actionPointerIndex); int action = (event.getAction() & MotionEvent.ACTION_MASK); /* API 8: event.getActionMasked(); */ float x = event.getX(actionPointerIndex) / mWidth; float y = event.getY(actionPointerIndex) / mHeight; float p = event.getPressure(actionPointerIndex); if (action == MotionEvent.ACTION_MOVE && pointerCount > 1) { // TODO send motion to every pointer if its position has // changed since prev event. for (int i = 0; i < pointerCount; i++) { pointerFingerId = event.getPointerId(i); x = event.getX(i) / mWidth; y = event.getY(i) / mHeight; p = event.getPressure(i); SDLActivity.onNativeTouch(touchDevId, pointerFingerId, action, x, y, p); } } else { SDLActivity.onNativeTouch(touchDevId, pointerFingerId, action, x, y, p); } return true; }
@Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { final float xDistance = Math.abs(e1.getX() - e2.getX()); final float yDistance = Math.abs(e1.getY() - e2.getY()); if (xDistance > this.swipe_Max_Distance || yDistance > this.swipe_Max_Distance) return false; velocityX = Math.abs(velocityX); velocityY = Math.abs(velocityY); boolean result = false; if (velocityX > this.swipe_Min_Velocity && xDistance > this.swipe_Min_Distance) { if (e1.getX() > e2.getX()) // right to left this.listener.onSwipe(SWIPE_LEFT); else this.listener.onSwipe(SWIPE_RIGHT); result = true; } else if (velocityY > this.swipe_Min_Velocity && yDistance > this.swipe_Min_Distance) { if (e1.getY() > e2.getY()) // bottom to up this.listener.onSwipe(SWIPE_UP); else this.listener.onSwipe(SWIPE_DOWN); result = true; } return result; }
@Override public boolean onTouchEvent(MotionEvent event) { switch (event.getActionMasked()) { case MotionEvent.ACTION_DOWN: path.reset(); path.moveTo(event.getX(), event.getY()); break; case MotionEvent.ACTION_MOVE: path.lineTo(event.getX(), event.getY()); break; } return super.onTouchEvent(event); }
@Override public boolean onTouchEvent(MotionEvent event) { int action = event.getAction(); long time = event.getEventTime(); switch (action & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: handleMouseDown(host, event.getPointerId(0), event.getX(), event.getY(), time); return true; case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_UP: handleMouseUp(host, event.getPointerId(0), event.getX(), event.getY(), time); return true; case MotionEvent.ACTION_MOVE: { int n = event.getPointerCount(); for (int i = 0; i < n; ++i) handleMouseDrag(host, event.getPointerId(i), event.getX(i), event.getY(i), time); return true; } case MotionEvent.ACTION_POINTER_UP: { int i = (action & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT; handleMouseUp(host, event.getPointerId(i), event.getX(i), event.getY(i), time); return true; } case MotionEvent.ACTION_POINTER_DOWN: { int i = (action & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT; handleMouseDown(host, event.getPointerId(i), event.getX(i), event.getY(i), time); return true; } default: break; } return false; }
@Override public boolean onSingleTapUp(MotionEvent e) { boolean toLeft = e.getX() < getWidth() / 2; if (toLeft) swipeRight(); else swipeLeft(); return true; }
@Override public boolean onTouchEvent(MotionEvent event) { int touchX = (int) event.getRawX(); int touchY = (int) event.getRawY(); int touchX1 = (int) event.getX(); int touchY1 = (int) event.getY(); /*getX()是表示view相对于自身左上角的x坐标, 而getRawX()是表示相对于屏幕左上角的x坐标值 (注意:这个屏幕左上角是手机屏幕左上角, 不管activity是否有titleBar或是否全屏幕) */ Rect rect = new Rect(); getGlobalVisibleRect(rect); // 用Rect将控件框起来 rect.left = rect.right - 40; // 将Rect的范围缩小到图片显示区域,只有点击落在改区域才会删除输入文字 if (length() > 1) { // 当有文字输入时在进行操作 if (rect.contains(touchX, touchY)) { setCompoundDrawablesWithIntrinsicBounds(null, null, deleteAllDown, null); } else { setCompoundDrawablesWithIntrinsicBounds(null, null, deleteAllOn, null); } if (event.getAction() == MotionEvent.ACTION_UP) { if (rect.contains(touchX, touchY)) { setText(""); // 清除输入的字符串 } setDraw(); // 重绘 } } return super.onTouchEvent(event); }
@Override public boolean onTouch(View v, MotionEvent event) { builder.setLength(0); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: builder.append("down, "); break; case MotionEvent.ACTION_MOVE: builder.append("move, "); break; case MotionEvent.ACTION_CANCEL: builder.append("cancel, "); break; case MotionEvent.ACTION_UP: builder.append("up, "); break; } builder.append(event.getX()); builder.append(", "); builder.append(event.getY()); String text = builder.toString(); Log.d("TouchTest", text); textView.setText(text); return true; }
@Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { // Set up the Scroller for a fling float scrollTheta = vectorToScalarScroll( velocityX, velocityY, e2.getX() - mPieBounds.centerX(), e2.getY() - mPieBounds.centerY()); mScroller.fling( 0, (int) getPieRotation(), 0, (int) scrollTheta / FLING_VELOCITY_DOWNSCALE, 0, 0, Integer.MIN_VALUE, Integer.MAX_VALUE); // Start the animator and tell it to animate for the expected duration of the fling. if (Build.VERSION.SDK_INT >= 11) { mScrollAnimator.setDuration(mScroller.getDuration()); mScrollAnimator.start(); } return true; }
public boolean onTouchEvent(MotionEvent e) { x = e.getX(); y = e.getY(); // 更新を有効にする this.invalidate(); return true; }
/** {@inheritDoc} */ public boolean onTouch(View view, MotionEvent motionEvent) { int action = motionEvent.getAction(); if (action == MotionEvent.ACTION_MOVE) { view.setX(view.getX() + motionEvent.getX() - (view.getWidth() / 2)); view.setY(view.getY() + motionEvent.getY() - (view.getHeight() / 2)); } return true; }
/** * If the motion event was relative to the view which in ignored view list,return true; * * @param ev * @return */ private boolean isInIgnoredView(MotionEvent ev) { Rect rect = new Rect(); for (View v : ignoredViews) { v.getGlobalVisibleRect(rect); if (rect.contains((int) ev.getX(), (int) ev.getY())) return true; } return false; }
@Override public boolean onTrackballEvent(MotionEvent event) { // Log.i(logTag, "onTrackballEvent"); if (trackballEvent(event.getAction(), event.getX(), event.getY())) { postUpdate(); } return true; }
// Touch events @Override public boolean onTouch(View v, MotionEvent event) { /* Ref: http://developer.android.com/training/gestures/multi.html */ final int touchDevId = event.getDeviceId(); final int pointerCount = event.getPointerCount(); int action = event.getActionMasked(); int pointerFingerId; int i = -1; float x, y, p; switch (action) { case MotionEvent.ACTION_MOVE: for (i = 0; i < pointerCount; i++) { pointerFingerId = event.getPointerId(i); x = event.getX(i) / mWidth; y = event.getY(i) / mHeight; p = event.getPressure(i); SDLActivity.onNativeTouch(touchDevId, pointerFingerId, action, x, y, p); } break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_DOWN: // Primary pointer up/down, the index is always zero i = 0; case MotionEvent.ACTION_POINTER_UP: case MotionEvent.ACTION_POINTER_DOWN: // Non primary pointer up/down if (i == -1) { i = event.getActionIndex(); } pointerFingerId = event.getPointerId(i); x = event.getX(i) / mWidth; y = event.getY(i) / mHeight; p = event.getPressure(i); SDLActivity.onNativeTouch(touchDevId, pointerFingerId, action, x, y, p); break; default: break; } return true; }
// 새로운 볼 생성 public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { Ball NewBall = Ball.Create((int) event.getX(), (int) event.getY(), RAD); arBall.add(NewBall); invalidate(); return true; } return false; }
@Override public boolean onTouchEvent(MotionEvent event) { int x = (int) event.getX(); int y = (int) event.getY(); if (event.getAction() == MotionEvent.ACTION_MOVE) { gameManager.onTouchEvent(x, y); } invalidate(); return true; }
/** 分发事件,主要做的是判断点击的是那个item, 以及通过postDelayed来设置响应左右滑动事件 */ @Override public boolean dispatchTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: { System.out.println("dispatch-->" + "down"); addVelocityTracker(event); // 假如scroller滚动还没有结束,我们直接返回 if (!scroller.isFinished()) { return false; } downX = (int) event.getX(); downY = (int) event.getY(); slidePosition = pointToPosition(downX, downY); // 无效的position, 不做任何处理 if (slidePosition == AdapterView.INVALID_POSITION) { return super.dispatchTouchEvent(event); } // 获取我们点击的item view itemView = getChildAt(slidePosition - getFirstVisiblePosition()); break; } case MotionEvent.ACTION_MOVE: { System.out.println("dispatch-->" + "move"); if (Math.abs(getScrollVelocity()) > SNAP_VELOCITY || (Math.abs(event.getX() - downX) > mTouchSlop && Math.abs(event.getY() - downY) < mTouchSlop)) { isSlide = true; } break; } case MotionEvent.ACTION_UP: recycleVelocityTracker(); break; } return super.dispatchTouchEvent(event); }
@Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: handleMouseDown(event.getX(), event.getY(), event.getEventTime()); return true; case MotionEvent.ACTION_MOVE: handleMouseDrag(event.getX(), event.getY(), event.getEventTime()); return true; case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_UP: handleMouseUp(event.getX(), event.getY(), event.getEventTime()); return true; default: break; } return false; }
@Override public boolean onTrackballEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { onKeyDown(KeyEvent.KEYCODE_DPAD_CENTER, null); } else { ZLApplication.Instance() .getCurrentView() .onTrackballRotated((int) (10 * event.getX()), (int) (10 * event.getY())); } return true; }
@Override public boolean onSingleTapUp(MotionEvent e) { ChartAxes axes = isAvailableTap(e.getX(), e.getY()); if (axes != null && tapPointListener != null) { tapPointListener.onTap(axes); currentPressedPoint = axes; refreshChart(0); } return true; }
// Touch events public boolean onTouch(View v, MotionEvent event) { int action = event.getAction(); float x = event.getX(); float y = event.getY(); float p = event.getPressure(); // TODO: Anything else we need to pass? SDLActivity.onNativeTouch(action, x, y, p); return true; }
private void handleLongPress(MotionEvent event) { QuranAyah result = getAyahFromCoordinates(event.getX(), event.getY()); if (result != null) { mImageView.highlightAyah(result.getSura(), result.getAyah()); mImageView.invalidate(); mImageView.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS); // TODO Temporary UI until new UI is implemented new ShowAyahMenuTask().execute(result.getSura(), result.getAyah(), mPageNumber); } }
@Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { // Set the pie rotation directly. float scrollTheta = vectorToScalarScroll( distanceX, distanceY, e2.getX() - mPieBounds.centerX(), e2.getY() - mPieBounds.centerY()); setPieRotation(getPieRotation() - (int) scrollTheta / FLING_VELOCITY_DOWNSCALE); return true; }
@Override public boolean onDoubleTap(MotionEvent e) { ImageViewTouch2 imageView = mImageView; // Switch between the original scale and 3x scale. if (imageView.getScale() > 2F) { mImageView.zoomTo(1f); } else { mImageView.zoomToPoint(3f, e.getX(), e.getY()); } return true; }
@Override public boolean onTouch(View view, MotionEvent event) { String str = null; int i = 0; str = "x=" + event.getX(i) / view.getMeasuredWidth() + ",y=" + event.getY(i) / view.getMeasuredHeight(); textView.setText(str); return false; }
@Override public boolean onTouchEvent(MotionEvent event) { // Log.w( "a", "touch me " + Float.toString( event.getX() ) + ", " + Float.toString( // event.getY() ) ); float[] x = new float[event.getPointerCount()]; float[] y = new float[event.getPointerCount()]; for (int i = 0; i < event.getPointerCount(); i++) { x[i] = event.getX(i); y[i] = event.getY(i); } XoLib.input(1, x, y); mView.requestRender(); return true; }
/** 处理我们拖动ListView item的逻辑 */ @Override public boolean onTouchEvent(MotionEvent ev) { if (isSlide && slidePosition != AdapterView.INVALID_POSITION) { System.out.println("touch-->" + "开始"); requestDisallowInterceptTouchEvent(true); addVelocityTracker(ev); final int action = ev.getAction(); int x = (int) ev.getX(); switch (action) { case MotionEvent.ACTION_DOWN: System.out.println("touch-->" + "down"); break; case MotionEvent.ACTION_MOVE: System.out.println("touch-->" + "move"); MotionEvent cancelEvent = MotionEvent.obtain(ev); cancelEvent.setAction( MotionEvent.ACTION_CANCEL | (ev.getActionIndex() << MotionEvent.ACTION_POINTER_INDEX_SHIFT)); onTouchEvent(cancelEvent); int deltaX = downX - x; // 手指拖动itemView滚动, deltaX大于0向左滚动,小于0向右滚 itemView.scrollTo(deltaX, 0); // 根据手指滑动的距离,调整透明度 itemView.setAlpha(1f - Math.abs((float) deltaX / screenWidth)); return true; // 拖动的时候ListView不滚动 case MotionEvent.ACTION_UP: System.out.println("touch-->" + "up"); // 手指离开的时候就不响应左右滚动 isSlide = false; int velocityX = getScrollVelocity(); if (velocityX > SNAP_VELOCITY) { scrollRight(); } else if (velocityX < -SNAP_VELOCITY) { scrollLeft(); } else { scrollByDistanceX(); } recycleVelocityTracker(); break; } } // 否则直接交给ListView来处理onTouchEvent事件 return super.onTouchEvent(ev); }
@Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { float dX = e2.getX() - e1.getX(); float dY = e1.getY() - e2.getY(); if (Math.abs(dY) < SWIPE_MAX_OFF_PATH && Math.abs(velocityX) >= SWIPE_THRESHOLD_VELOCITY && Math.abs(dX) >= SWIPE_MIN_DISTANCE) { if (dX > 0) { swipeRight(); } else { swipeLeft(); } return true; } return false; }
/** 当屏幕被触摸时调用 */ @Override public boolean onTouchEvent(MotionEvent event) { // 设置贝塞尔曲线的坐标为触摸时坐标 qStartX = (int) event.getX(); qStartY = (int) event.getY(); // 设置贝塞尔曲线的控制点坐标为终点坐标与起点坐标对应的差值的一半,注意这里不是曲线的中点 qControlX = Math.abs(qEndX - qStartX) / 2; qCOntrolY = Math.abs(qEndY - qStartY) / 2; // 设置控制点的横坐标不返回 cReturn = false; return super.onTouchEvent(event); }
private void sendDownEvent() { if (DEBUG) { PtrCLog.d(LOG_TAG, "send down event"); } final MotionEvent last = mLastMoveEvent; MotionEvent e = MotionEvent.obtain( last.getDownTime(), last.getEventTime(), MotionEvent.ACTION_DOWN, last.getX(), last.getY(), last.getMetaState()); dispatchTouchEventSupper(e); }
private boolean thisTouchAllowed(MotionEvent ev) { int x = (int) (ev.getX() + mScrollX); if (isMenuOpen()) { return mViewBehind.menuOpenTouchAllowed(mContent, mCurItem, x); } else { switch (mTouchMode) { case SlidingMenu.TOUCHMODE_FULLSCREEN: return !isInIgnoredView(ev); case SlidingMenu.TOUCHMODE_NONE: return false; case SlidingMenu.TOUCHMODE_MARGIN: return mViewBehind.marginTouchAllowed(mContent, x); } } return false; }