2014-06-20 16 views
9

Tôi đã thử triển khai mã từ câu hỏi này: Detecting a long press with Android, nhưng nó luôn phát hiện một báo chí dài, nếu ngay cả tôi chỉ cần nhấn vào nó. Mã của tôi là như sau (tôi mở rộng ImageView, bởi vì mã hơn là ở trong đó, không có liên quan cho câu hỏi này):Báo chí dài trong GestureDetector cũng kích hoạt trên tap

public class EbsImageView extends ImageView { 
    final GestureDetector gestureDetector = new GestureDetector(this.getContext(), new GestureDetector.SimpleOnGestureListener() { 
     public void onLongPress(MotionEvent e) { 
      Log.e("", "Longpress detected"); 
     } 
    public boolean onSingleTapUP(MotionEvent e) { 
     Log.e("", "Press detected"); 

      // don't consume, we want the long press to fire if it was a 
      // long press 
     return false; 
     } 
    }); 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     return gestureDetector.onTouchEvent(event); 
    } 
} 
+0

return false from onTouchEvent() –

+0

@ Eu.Dr. không có sự khác biệt, tôi cũng đã thử mã từ đây: http://developer.android.com/training/gestures/detector.html nhưng cùng một vấn đề. –

+0

Chú thích @Override của bạn ở đâu trênLongPress và onSingleTapUp? Nó chỉ là một bản sao/dán không? – Opiatefuchs

Trả lời

0

Như tôi đã đề cập trong nhận xét của tôi, bạn nên phân biệt giữa onSingleTapUp()onSingleTapUP(). Sử dụng chú thích Ghi đè là một phương pháp hay.

Tôi hơi bối rối vì tiêu đề câu hỏi của bạn dường như chỉ ra rằng báo chí dài cũng kích hoạt sự kiện nhấn, trong khi văn bản câu hỏi của bạn nói theo cách khác. Đó là một vòi nước bắn một sự kiện báo chí dài. Nếu trường hợp sau đó xảy ra, hãy thử trả lại giá trị đúng từ số onSingleTapUp() của bạn. Điều này phù hợp với tôi bằng cách sử dụng SimpleGestureListener:

class SimpleGestureListener extends GestureDetector.SimpleOnGestureListener { 

    @Override 
    public boolean onDown(MotionEvent event) { 
    //... 
    return super.onDown(event); 
    } 

    @Override 
    public boolean onSingleTapUp(MotionEvent event) { 
    //... 
    return true; 
    } 

    @Override 
    public void onLongPress(MotionEvent event) { 
    //... 
    super.onLongPress(event); 
    } 
} 

Tôi hy vọng điều đó sẽ hữu ích.

13

Bạn cần ghi đè onDown và đặt nó return true. Mã sau đã làm việc cho tôi:

class SimpleGestureListener extends GestureDetector.SimpleOnGestureListener { 

    @Override 
    public boolean onDown(MotionEvent event) { 
     // triggers first for both single tap and long press 
     return true; 
    } 

    @Override 
    public boolean onSingleTapUp(MotionEvent event) { 
     // triggers after onDown only for single tap 
     return true; 
    } 

    @Override 
    public void onLongPress(MotionEvent event) { 
     // triggers after onDown only for long press 
     super.onLongPress(event); 
    } 
} 
Các vấn đề liên quan