下面列出了android.view.MotionEvent#getRawX ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@SuppressLint("ClickableViewAccessibility")
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_UP:
if (mRightListener != null) {
Drawable drawableRight = getCompoundDrawables()[DRAWABLE_RIGHT];
event.getY();
if (drawableRight != null && event.getRawX() >= (getRight() - drawableRight.getBounds().width())) {
mRightListener.onDrawableRightClick();
return true ;
}
}
break;
}
return super.onTouchEvent(event);
}
@SuppressLint("ClickableViewAccessibility")
@Override
public boolean onTouchEvent(MotionEvent event) {
int action = event.getActionMasked();
switch (action) {
case MotionEvent.ACTION_DOWN:
dX = getX() - event.getRawX();
dY = getY() - event.getRawY();
if (!hasFocus) {
hasFocus = true;
showControls();
invalidate();
}
return true;
case MotionEvent.ACTION_MOVE:
moveView(event);
return true;
case MotionEvent.ACTION_UP:
return true;
}
return super.onTouchEvent(event);
}
/**
* 判断View是否要去处理触摸事件
*
* @param v
* @param event
* @return
*/
private boolean childNeedHandleTouchEvent(View v, MotionEvent event) {
if (v == null)
return false;
int[] loc = new int[2];
v.getLocationOnScreen(loc);
int left = loc[0];
int top = loc[1];
if (event.getRawX() > left && event.getRawX() < left + v.getWidth()
&& event.getRawY() > top
&& event.getRawY() < top + v.getHeight()) {
return v.onTouchEvent(event);
}
return false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
mX = event.getRawX();
mY = event.getRawY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mTouchX = event.getX();
mTouchY = event.getY();
break;
case MotionEvent.ACTION_MOVE:
if (mDragEnabled) {
updateViewPostion();
}
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
mTouchX = mTouchY = 0;
mDragEnabled = false;
break;
default:
break;
}
return super.onTouchEvent(event);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (!isBeingDragged)
return super.onTouchEvent(event);
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_MOVE:
final float y = event.getRawY();
final float x = event.getRawX();
moveListener.move((int) (x - mInitialMotionX), (int) (y - mInitialMotionY));
//mInitialMotionY = y;
//mInitialMotionX = x;
//Log.e("move",
// x + "-" + y);
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
moveListener.end();
}
return true;
}
@Override
public boolean onTouchEvent(MotionEvent event)
{
if (imgAble != null && event.getAction() == MotionEvent.ACTION_UP)
{
//获取点击坐标
int eventX = (int) event.getRawX();
int eventY = (int) event.getRawY();
//Log.e(TAG, "eventX = " + eventX + "; eventY = " + eventY);
Rect rect = new Rect();
//获取当前View在屏幕坐标中的可视区域,放到rect
getGlobalVisibleRect(rect);
//图标的左右位置
rect.left = rect.right - imgAble.getIntrinsicWidth() - dip2px(22);
//判断点击位置是否在 图标上面
if (rect.contains(eventX, eventY))
setText("");
}
return super.onTouchEvent(event);
}
public int viewIdHitPosition(MotionEvent ev, int id) {
final int x = (int) ev.getX();
final int y = (int) ev.getY();
int touchPos = mDslv.pointToPosition(x, y); // includes headers/footers
final int numHeaders = mDslv.getHeaderViewsCount();
final int numFooters = mDslv.getFooterViewsCount();
final int count = mDslv.getCount();
// Log.d("mobeta", "touch down on position " + itemnum);
// We're only interested if the touch was on an
// item that's not a header or footer.
if (touchPos != AdapterView.INVALID_POSITION && touchPos >= numHeaders
&& touchPos < (count - numFooters)) {
final View item = mDslv.getChildAt(touchPos - mDslv.getFirstVisiblePosition());
final int rawX = (int) ev.getRawX();
final int rawY = (int) ev.getRawY();
View dragBox = id == 0 ? item : (View) item.findViewById(id);
if (dragBox != null) {
dragBox.getLocationOnScreen(mTempLoc);
if (rawX > mTempLoc[0] && rawY > mTempLoc[1] &&
rawX < mTempLoc[0] + dragBox.getWidth() &&
rawY < mTempLoc[1] + dragBox.getHeight()) {
mItemX = item.getLeft();
mItemY = item.getTop();
return touchPos;
}
}
}
return MISS;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
downTime = System.currentTimeMillis();
mInnerX = event.getX();
mInnerY = event.getY();
postDelayed(this, 300);
break;
case MotionEvent.ACTION_MOVE:
float x = event.getRawX();
float y = event.getRawY();
WindowManager.LayoutParams params = (WindowManager.LayoutParams) getLayoutParams();
params.x = (int) (x - mInnerX);
params.y = (int) (y - mInnerY - mStatusHeight);
updateLayout(params);
if(Math.abs(event.getX() - mInnerX) > 20
|| Math.abs(event.getY() - mInnerY) > 20) {
removeCallbacks(this);
}
break;
case MotionEvent.ACTION_UP:
removeCallbacks(this);
if(System.currentTimeMillis() - downTime < 100
&& Math.abs(event.getX() - mInnerX) < 20
&& Math.abs(event.getY() - mInnerY) < 20) {
doClick();
}
moveToBorder();
break;
}
return true;
}
public boolean onUtilsMove(View view, MotionEvent event) {
int x = (int) event.getRawX();
int y = (int) event.getRawY();
if (downX == -1) {
// not receive down should reset
resetTouch(x, y);
view.setPressed(true);
}
if (state != STATE_MOVE) {
if (Math.abs(x - lastX) < touchSlop && Math.abs(y - lastY) < touchSlop) {
return true;
}
state = STATE_MOVE;
if (Math.abs(x - lastX) >= Math.abs(y - lastY)) {
if (x - lastX < 0) {
direction = LEFT;
} else {
direction = RIGHT;
}
} else {
if (y - lastY < 0) {
direction = UP;
} else {
direction = DOWN;
}
}
}
boolean consumeMove =
onMove(view, direction, x, y, x - lastX, y - lastY, x - downX, y - downY, event);
lastX = x;
lastY = y;
return consumeMove;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// If this view is not enabled, touch event must return false.
if (!isEnabled()) {
return false;
}
int action = event.getAction();
if (action == MotionEvent.ACTION_DOWN) {
setHandleMode(HANDLE_DOWN);
mLastY = (int) event.getRawY();
mLastX = (int) event.getRawX();
mDragDirection = getDragDirection((int) event.getX(), (int) event.getY());
invalidate();
} else if (action == MotionEvent.ACTION_MOVE) {
setHandleMode(HANDLE_MOVE);
drag(event, action);
invalidate();
} else if (action == MotionEvent.ACTION_UP) {
setHandleMode(HANDLE_UP);
drag(event, action);
invalidate();
} else if (action == MotionEvent.ACTION_CANCEL) {
getParent().requestDisallowInterceptTouchEvent(false);
}
return true;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
// if (ev.getRawX() >= range && getLeft() >= range) {
// LogUtil.e("中断");
// } else {
// LogUtil.e("不中断");
// }
return ev.getRawX() >= range && getLeft() >= range;
}
/**
* This will determine two things.
* 1. If we need to handle the touch event
* 2. If reordering needs to start due to dragHandle being clicked
*/
@Override
public boolean onInterceptTouchEvent(RecyclerView recyclerView, MotionEvent event) {
if (dragState == DragState.DRAGGING) {
return true;
}
if (dragHandleId == INVALID_RESOURCE_ID) {
return false;
}
View itemView = recyclerView.findChildViewUnder(event.getX(), event.getY());
if (itemView == null) {
return false;
}
View handleView = itemView.findViewById(dragHandleId);
if (handleView == null || handleView.getVisibility() != View.VISIBLE) {
return false;
}
int[] handlePosition = new int[2];
handleView.getLocationOnScreen(handlePosition);
//Determine if the MotionEvent is inside the handle
if ((event.getRawX() >= handlePosition[0] && event.getRawX() <= handlePosition[0] + handleView.getWidth()) &&
(event.getRawY() >= handlePosition[1] && event.getRawY() <= handlePosition[1] + handleView.getHeight())) {
startReorder(itemView, event);
return true;
}
return false;
}
private boolean isCancelled(View view, MotionEvent event) {
int[] location = new int[2];
view.getLocationOnScreen(location);
if (event.getRawX() < location[0] || event.getRawX() > location[0] + view.getWidth()
|| event.getRawY() < location[1] - 40) {
return true;
}
return false;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
// //如果点击的是我的频道组中的频道
if (event.getAction() == MotionEvent.ACTION_DOWN) {
maxDistanceToDownPosition = 0;
downX = dragX = event.getRawX();
downY = dragY = event.getRawY();
if (isEditState) {
setTime(v);
}
}
if (isEditState) {
if (event.getAction() == MotionEvent.ACTION_MOVE && isAccessDrag) {
//手移动时拖动频道
//请求ScrollView不要拦截MOVE事件,交给TextView处理
requestDisallowInterceptTouchEvent(true);
if (maxDistanceToDownPosition < maxAccessDrag) {
double sqrt = Math.sqrt(Math.pow(event.getRawX() - downX, 2) + Math.pow(event.getRawY() - downY, 2));
if (sqrt > maxDistanceToDownPosition) {
maxDistanceToDownPosition = sqrt;
}
}
channelDrag(v, event);
}
if (event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL) {
if (thread != null && thread.isAlive() && !thread.isInterrupted()) {
thread.interrupt();
}
if (isAccessDrag) {
ChannelAttr vTag = getChannelAttr(v);
v.animate().x(vTag.coordinate.x).y(vTag.coordinate.y).setDuration(DURATION_TIME);
styleAdapter.setEditStyle(getViewHolder(v));
isAccessDrag = false;
return !(maxDistanceToDownPosition < maxAccessDrag);
}
}
}
return false;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
if (v.getId() == R.id.small_renderer) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
dX = v.getX() - event.getRawX();
dY = v.getY() - event.getRawY();
break;
case MotionEvent.ACTION_MOVE:
v.animate()
.x(event.getRawX() + dX)
.y(event.getRawY() + dY)
.setDuration(0)
.start();
break;
case MotionEvent.ACTION_UP:
v.animate()
.x(event.getRawX() + dX >= event.getRawY() + dY ? event.getRawX()
+ dX : 0)
.y(event.getRawX() + dX >= event.getRawY() + dY ? 0
: event.getRawY() + dY)
.setDuration(10)
.start();
break;
}
}
return true;
}
private void saveTouchCoords(MotionEvent ev) {
int action = ev.getAction() & MotionEvent.ACTION_MASK;
if (action != MotionEvent.ACTION_DOWN) {
mLastX = mX;
mLastY = mY;
}
mX = (int) ev.getX();
mY = (int) ev.getY();
if (action == MotionEvent.ACTION_DOWN) {
mLastX = mX;
mLastY = mY;
}
mOffsetX = (int) ev.getRawX() - mX;
mOffsetY = (int) ev.getRawY() - mY;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (!isPDFViewReady()) {
return super.onTouchEvent(event);
}
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_POINTER_DOWN:
pdfView.stopFling();
handler.removeCallbacks(hidePageScrollerRunnable);
if (pdfView.isSwipeVertical()) {
currentPos = event.getRawY() - getY();
} else {
currentPos = event.getRawX() - getX();
}
case MotionEvent.ACTION_MOVE:
if (pdfView.isSwipeVertical()) {
setPosition(event.getRawY() - currentPos + relativeHandlerMiddle);
pdfView.setPositionOffset(relativeHandlerMiddle / (float) getHeight(), false);
} else {
setPosition(event.getRawX() - currentPos + relativeHandlerMiddle);
pdfView.setPositionOffset(relativeHandlerMiddle / (float) getWidth(), false);
}
return true;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_POINTER_UP:
hideDelayed();
pdfView.performPageSnap();
return true;
}
return super.onTouchEvent(event);
}
@Override
public boolean dispatchTouchEvent(@SuppressWarnings("NullableProblems") MotionEvent event) {
if (mSelfUpdateScroll) {
mIsTouchOngoing = false;
mIsDraggingDraggable = false;
mIsScrolling = false;
mIsFlinging = false;
mOverScrollStarted = false;
removeCallbacks(mIdleRunnable);
removeCallbacks(mScrollRunnable);
return super.dispatchTouchEvent(event);
}
final int action = event.getActionMasked();
if (action == MotionEvent.ACTION_DOWN) {
mIsTouchOngoing = true;
mScroller.abortAnimation();
if (mDraggableView != null && mDraggableView.getGlobalVisibleRect(mDraggableRect)) {
final int x = (int) (event.getRawX() + .5F);
final int y = (int) (event.getRawY() + .5F);
mIsDraggingDraggable = mDraggableRect.contains(x, y);
} else {
mIsDraggingDraggable = false;
}
} else if (action == MotionEvent.ACTION_UP
|| action == MotionEvent.ACTION_CANCEL){
mIsTouchOngoing = false;
if (mCloseUpAlgorithm != null) {
removeCallbacks(mIdleRunnable);
postDelayed(mIdleRunnable, mConsiderIdleMillis);
}
// great, now we are able to cancel ghost touch when up event Y == mMaxScrollY
if (mEventRedirected) {
if (action == MotionEvent.ACTION_UP) {
final float diff = Math.abs(event.getRawY() - mEventRedirectStartedY);
if (Float.compare(diff, mScaledTouchSlop) < 0) {
event.setAction(MotionEvent.ACTION_CANCEL);
}
}
mEventRedirected = false;
}
cancelOverScroll();
}
final boolean isPrevScrolling = mIsScrolling;
final boolean isPrevFlinging = mIsFlinging;
mIsFlinging = mFlingDetector .onTouchEvent(event);
mIsScrolling = mScrollDetector.onTouchEvent(event);
removeCallbacks(mScrollRunnable);
post(mScrollRunnable);
final boolean isIntercepted = mIsScrolling || mIsFlinging;
final boolean isPrevIntercepted = isPrevScrolling || isPrevFlinging;
final boolean shouldRedirectDownTouch = action == MotionEvent.ACTION_MOVE
&& (!isIntercepted && isPrevIntercepted)
&& getScrollY() == mMaxScrollY;
if (isIntercepted || isPrevIntercepted) {
mMotionEventHook.hook(event, MotionEvent.ACTION_CANCEL);
if (!isPrevIntercepted) {
return true;
}
}
if (shouldRedirectDownTouch) {
mMotionEventHook.hook(event, MotionEvent.ACTION_DOWN);
mEventRedirectStartedY = event.getRawY();
mEventRedirected = true;
}
super.dispatchTouchEvent(event);
return true;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int action = event.getActionMasked();
boolean handled = false;
switch (action) {
case MotionEvent.ACTION_POINTER_DOWN:
case MotionEvent.ACTION_DOWN: {
int handle = pointInsideHandle(event.getX(), event.getY());
if (handle != 0) {
currentHandle = handle;
previousLocationX = event.getRawX();
previousLocationY = event.getRawY();
hasReleased = false;
handled = true;
}
}
break;
case MotionEvent.ACTION_MOVE: {
if (currentHandle == SELECTION_WHOLE_HANDLE) {
float x = event.getRawX();
float y = event.getRawY();
handled = onTouchMove(x, y);
}
else if (currentHandle != 0) {
hasTransformed = true;
Point translation = new Point(event.getRawX() - previousLocationX, event.getRawY() - previousLocationY);
float radAngle = (float) Math.toRadians(getRotation());
float delta = (float) (translation.x * Math.cos(radAngle) + translation.y * Math.sin(radAngle));
if (currentHandle == SELECTION_LEFT_HANDLE) {
delta *= -1;
}
float scaleDelta = 1 + (delta * 2) / getWidth();
scale(scaleDelta);
float centerX = getLeft() + getWidth() / 2;
float centerY = getTop() + getHeight() / 2;
float parentX = event.getRawX() - ((View) getParent()).getLeft();
float parentY = event.getRawY() - ((View) getParent()).getTop() - AndroidUtilities.statusBarHeight;
float angle = 0;
if (currentHandle == SELECTION_LEFT_HANDLE) {
angle = (float) Math.atan2(centerY - parentY, centerX - parentX);
} else if (currentHandle == SELECTION_RIGHT_HANDLE) {
angle = (float) Math.atan2(parentY - centerY, parentX - centerX);
}
rotate((float) Math.toDegrees(angle));
previousLocationX = event.getRawX();
previousLocationY = event.getRawY();
handled = true;
}
}
break;
case MotionEvent.ACTION_POINTER_UP:
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL: {
onTouchUp();
currentHandle = 0;
handled = true;
}
break;
}
if (currentHandle == SELECTION_WHOLE_HANDLE) {
gestureDetector.onTouchEvent(event);
}
return handled;
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
switch (ev.getActionMasked()) {
case MotionEvent.ACTION_DOWN: {
mDownPositionX = ev.getRawX();
mDownPositionY = ev.getRawY();
mTouchToWindowOffsetX = mDownPositionX - mPositionX;
mTouchToWindowOffsetY = mDownPositionY - mPositionY;
mIsDragging = true;
mController.beforeStartUpdatingPosition(this);
mTouchTimer = SystemClock.uptimeMillis();
break;
}
case MotionEvent.ACTION_MOVE: {
updatePosition(ev.getRawX(), ev.getRawY());
break;
}
case MotionEvent.ACTION_UP:
if (mIsInsertionHandle) {
long delay = SystemClock.uptimeMillis() - mTouchTimer;
if (delay < ViewConfiguration.getTapTimeout()) {
if (mPastePopupWindow != null && mPastePopupWindow.isShowing()) {
// Tapping on the handle dismisses the displayed paste view,
mPastePopupWindow.hide();
} else {
showPastePopupWindow();
}
}
}
mIsDragging = false;
break;
case MotionEvent.ACTION_CANCEL:
mIsDragging = false;
break;
default:
return false;
}
return true;
}