Tôi đã sử dụng một cái gì đó như thế này trong một trong các dự án của tôi.
Chỉ định OnTouchListener
cho mọi ô trong lưới của bạnXem và ghi đè phương thức OnTouch.
@Override
public boolean onTouch(View v, MotionEvent event) {
boolean isLongPressed;
int mSwipeSlop = ViewConfiguration.get(context).
getScaledTouchSlop();
boolean mSwiping;
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
handler.postDelayed(mLongPressed, 1000);
break;
case MotionEvent.ACTION_CANCEL:
handler.removeCallbacks(mLongPressed);
break;
case MotionEvent.ACTION_MOVE:
float x = event.getX() + v.getTranslationX();
float deltaX = x - mDownX;
float deltaXAbs = Math.abs(deltaX);
float y = event.getY() + v.getTranslationY();
float deltaY = Y - mDownY;
float deltaYAbs = Math.abs(deltaY);
float absDist = Math.sqrt(Math.pow(deltaXAbs, 2) + Math.pow(deltaXAbs, 2));
if (!mSwiping) {
if (absDist > mSwipeSlop) {
mSwiping = true;
handler.removeCallbacks(mLongPressed);
}
}
break;
case MotionEvent.ACTION_UP:
handler.removeCallbacks(mLongPressed);
if (isLongPressed) {
// DO ACTION UP
}
break;
default:
return false;
}
return true;
}
Mở hộp thoại trong Runnable mLongĐược nén, sẽ chỉ chạy nếu người dùng chạm vào cùng một vị trí trong một giây. Bạn có thể thay đổi khoảng cách mà anh ấy có thể di chuyển và thời gian anh ấy cần nhấn để đăng ký như một cú nhấp chuột dài. Tuy nhiên, tôi khuyên bạn nên sử dụng getScaledTouchSlop() cho khoảng cách.
final Handler handler = new Handler();
Runnable mLongPressed = new Runnable() {
public void run() {
// OPEN DIALOG
isLongPressed = true;
}
};
Bằng cách sử dụng mã này trong dự án của tôi, người dùng có thể di chuyển ngón tay quanh toàn màn hình mà không kích hoạt ACTION_UP. Chỉ khi anh ta nhấc ngón tay lên, nó được kích hoạt.
Bạn có thể cụ thể hơn không? tôi không hiểu những gì bạn muốn làm. – TheRedFox
Có chế độ xem trong một hoạt động hoặc đoạn kích hoạt hiển thị hộp thoại khi chế độ xem được nhấn lâu (hoạt động). Người dùng phải có thể di chuyển ngón tay của họ ra khỏi chế độ xem đã kích hoạt hộp thoại nhưng không bao giờ ngắt liên lạc với màn hình. Khi nào và chỉ khi nào, người dùng ngắt liên hệ với màn hình sẽ kích hoạt một sự kiện khác. Sự cố: khi di chuyển ra ngoài giới hạn của chế độ xem gốc ACTION_UP và/hoặc ACTION_CANCEL được kích hoạt và không có lần chạm nào được hộp thoại đăng ký (hoặc bất kỳ thứ gì khác) cho đến khi người dùng ngắt liên lạc với màn hình và chỉnh sửa lại. –
Tôi đã làm điều gì đó tương tự mà không có chế độ xem lưới. Người dùng phải bấm lâu một hộp thoại sẽ xuất hiện người dùng có thể di chuyển ngón tay của mình (trong khi nhấn) ở khắp mọi nơi và khi người dùng nhấc hộp thoại ngón tay bị ẩn. Vui lòng cân nhắc tạo video và đăng video tại đây. Tôi không hiểu phần này (và không có chạm được đăng ký bởi hộp thoại (hoặc bất cứ điều gì khác) cho đến khi người dùng phá vỡ liên lạc với màn hình và chỉnh sửa.) –