Tôi cần một phát hiện cảm ứng singletap trong phương pháp ontouch của chế độ xem tùy chỉnh của tôi. Tôi đã thử nhận được giá trị x và y trong cả ACTION-DOWN và ACTION-UP và trong ACTION-UP, tôi đã đưa ra một điều kiện là nếu giá trị của X và Y trong ACTIONDOWN và ACTION-UP bằng nhau thì hãy lấy nó như một lần nhấn .phát hiện cảm ứng singletap trong phương pháp Ontouch của chế độ xem
Mã của tôi là như sau
@Override
public boolean onTouchEvent(MotionEvent ev) {
if (!mSupportsZoom && !mSupportsPan) return false;
mScaleDetector.onTouchEvent(ev);
final int action = ev.getAction();
switch (action & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN: {
final float x = ev.getX();
final float y = ev.getY();
mLastTouchX = x; //here i get x and y values in action down
mLastTouchY = y;
mActivePointerId = ev.getPointerId(0);
break;
}
case MotionEvent.ACTION_MOVE: {
final int pointerIndex = ev.findPointerIndex(mActivePointerId);
final float x = ev.getX(pointerIndex);
final float y = ev.getY(pointerIndex);
if (mSupportsPan && !mScaleDetector.isInProgress()) {
final float dx = x - mLastTouchX;
final float dy = y - mLastTouchY;
mPosX += dx;
mPosY += dy;
//mFocusX = mPosX;
//mFocusY = mPosY;
invalidate();
}
mLastTouchX = x;
mLastTouchY = y;
break;
}
case MotionEvent.ACTION_UP: {
final float x = ev.getX();
final float y = ev.getY();
touchupX=x; //here is get x and y values at action up
touchupY=y;
if(mLastTouchX == touchupX && mLastTouchY == touchupY){ //my condition if both the x and y values are same .
PinchZoomPanActivity2.tapped1(this.getContext(), 100); //my method if the singletap is detected
}
else{
}
mActivePointerId = INVALID_POINTER_ID;
break;
}
case MotionEvent.ACTION_CANCEL: {
mActivePointerId = INVALID_POINTER_ID;
break;
}
case MotionEvent.ACTION_POINTER_UP: {
final int pointerIndex = (ev.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK)
>> MotionEvent.ACTION_POINTER_INDEX_SHIFT;
final int pointerId = ev.getPointerId(pointerIndex);
if (pointerId == mActivePointerId) {
final int newPointerIndex = pointerIndex == 0 ? 1 : 0;
mLastTouchX = ev.getX(newPointerIndex);
mLastTouchY = ev.getY(newPointerIndex);
mActivePointerId = ev.getPointerId(newPointerIndex);
}
break;
}
}
return true;
}
nhưng tôi không thể làm cho nó thực hiện. Tôi có nghĩa là ở mỗi hành động lên phương pháp của tôi được gọi là. ngay cả khi các giá trị x và y của cả actionup và actiondown đều không giống nhau. và tôi nghĩ rằng tôi cũng cần phải đặt một số phạm vi vào singletap khi chúng ta chạm ngón tay trên màn hình. Bất cứ ai có thể gợi ý cho tôi một số cách?
Nó sẽ không bao giờ ở cùng một vị trí, ngón tay của bạn sẽ luôn di chuyển nhẹ. Sử dụng kiểm tra phạm vi-đảm bảo rằng abs (upLoc-downLoc) <5. –
tôi cần phải sử dụng kiểm tra phạm vi nhưng tôi không hiểu "abs (upLoc-downLoc) <5" của bạn. –
abs = giá trị tuyệt đối. Điều đó có nghĩa là nếu vị trí đã thay đổi ít hơn 5 pixel. –