2010-07-09 29 views
6

Tôi đang cố gắng triển khai pinch-zoom trong ứng dụng tôi đang tạo và đang gặp sự cố với sự kiện onTouch. Dường như con trỏ lên các hành động không hoạt động & không kích hoạt ngay lập tức, như bạn sẽ không nhận được con trỏ lên hoặc xuống cho đến khi một hành động di chuyển xảy ra. Vì vậy, những gì sẽ xảy ra nếu cả hai ngón tay chạm vào màn hình gần như đồng thời là ngón tay thứ 2 (nên là con trỏ (1)) nhận được một hành động di chuyển trước khi con trỏ xuống được gọi, làm cho mã nghĩ rằng đó là một DRAG không phải là một pinch zoom. Bất cứ ai khác nhìn thấy điều này? Dù sao xung quanh nó? Cảm ơn.sự kiện trênTouch đôi khi không kích hoạt ACTION_POINTER_DOWN

Trả lời

0

Tôi đã gặp vấn đề tương tự trong dự án của mình. Nếu tôi chạm vào màn hình và ngón tay của tôi là quá gần togheter hệ thống không nhận ra một sự kiện multitouch. Tôi nghĩ rằng đó là bởi vì khi ngón tay của bạn quá gần togheter hệ thống nhìn thấy nó như một ngón tay duy nhất.

Có thể bạn có thể kiểm tra giả định này bằng cách sử dụng phương pháp getSize() để ước tính diện tích màn hình đang được nhấn khi bạn chạm vào màn hình bằng một ngón tay và khi bạn chạm vào màn hình bằng hai ngón tay.

+0

Cảm ơn lời khuyên, điều đó sẽ có ích mà tôi chắc chắn. Nhưng tôi không chắc đó là vấn đề của tôi khi nó xảy ra bất kể tôi chạm vào màn hình ở đâu. Sử dụng trình gỡ rối tôi có thể thấy rằng các sự kiện lên xuống có vẻ luôn bị trễ và xảy ra sau một sự kiện di chuyển (và sự kiện di chuyển luôn luôn chỉ có một con trỏ trong cá thể đó). Tôi thậm chí đã thử ứng dụng "Dotty" và có thể thấy hành vi tương tự trong đó. Nó có thể là một vấn đề phần cứng? Tôi có một Evo w/custom ROM. Cảm ơn. – JStew

0

Hóa ra là sự cố với ROM tùy chỉnh mà tôi đã nhấp vào Evo của mình. Cảm ơn một lần nữa để hara cho lời khuyên của họ như hóa ra là một lỗi tôi đã có.

1

phải đối mặt với cùng một vấn đề Hóa ra ACTION_POINTER_2_DOWN đã bị sa thải trong ứng dụng của tôi khi tôi chạm vào ngón tay thứ hai và sau ACTION_MOVE đó đã bị sa thải phương pháp getAction() cho biết số sự kiện mà cần phải được kiểm tra đối chiếu danh sách này

+0

http://developer.android.com/reference/android/view/MotionEvent.html#ACTION_MOVE – Omkar

29

đảm bảo bao gồm MotionEvent.ACTION_MASK trong chuyển đổi của bạn. Ví dụ:

switch(event.getAction() & MotionEvent.ACTION_MASK){ 
case MotionEvent.ACTION_DOWN: 
some code 
break; 
case MotionEvent.ACTION_POINTER_DOWN: 
ETC 
+0

WOW! Điều này thực sự giải quyết vấn đề của tôi! Tôi không thể hiểu tại sao ... nhưng hey! Cảm ơn: D – Supercelo

+0

Bạn thực sự là người thật @tayler! – Sipty

+0

bạn đã lưu ngày của tôi thân yêu .. thnxx rất nhiều! –

0

tôi đã giải quyết cùng một vấn đề với điều này:

switch(event.getActionMasked()) { 
    case MotionEvent.ACTION_POINTER_DOWN: 
     //your code 
    break; 
} 
0

tôi đã nhận thấy rằng đây (MotionEvent.ACTION_POINTER_DOWN) trường hợp bị sa thải nếu onTouch phương pháp (sự kiện) đã trở lại như đúng như đưa ra dưới đây:

@Override 
public boolean onTouchEvent(MotionEvent event) { 

    switch(motionEvent.getAction() & MotionEvent.ACTION_MASK) { 
     case MotionEvent.ACTION_POINTER_DOWN: 
     //your code 
     break ; 
    } 
    return true; 
} 

Lưu ý: MotionEvent.ACTION_DOWN chỉ việc lắng nghe nếu onTouch() phương pháp có r eturned một giá trị boolean là return super.onTouchEvent (event); để đảm bảo đúng như vậy để tránh tình trạng này.

Các vấn đề liên quan