2012-07-05 29 views
6

Các tài liệu nói điều này về điều đó:Android - Làm thế nào để xử lý hai ngón tay cảm ứng

Một cử chỉ bắt đầu với một sự kiện chuyển động với ACTION_DOWN cung cấp vị trí của con trỏ xuống đầu tiên. Khi mỗi con trỏ bổ sung bị hỏng hoặc xuống, khung sẽ tạo sự kiện chuyển động với ACTION_POINTER_DOWN hoặc ACTION_POINTER_UP tương ứng.

Vì vậy, tôi đã làm việc override hàm onTouchEvent trong hoạt động của tôi:

@Override 
public boolean onTouchEvent(MotionEvent MEvent) 
{ 

    motionaction = MEvent.getAction(); 

    if(motionaction == MotionEvent.ACTION_DOWN) 
    { 
     System.out.println("DEBUG MESSAGE POINTER1 " + MEvent.getActionIndex()); 
    } 

    if(motionaction == MotionEvent.ACTION_POINTER_DOWN) 
    { 
     System.out.println("DEBUG MESSAGE POINTER2 " + MEvent.getActionIndex()); 
    } 

} 

Thật không may là thứ hai nếu không bao giờ được nhập vào. Hoạt động có 2 chế độ xem với 2 OnTouchListener, tôi biết rằng onTouchEvent chỉ được gọi nếu chế độ xem hoạt động không tiêu thụ sự kiện vì vậy tôi đã cố gắng trả về false trong trình lắng nghe và theo cách đó tôi chỉ có thể nhận ra chạm ngón tay đầu tiên nhưng điều này tránh người nghe nhận sự kiện ACTION_UP và không cho phép tôi nhận ra ngón tay thứ hai chạm vào. Tôi cũng cố gắng trả lời đúng trong người nghe nhưng sau khi tự gọi hàm onTouchEvent nhưng điều này cho phép tôi chỉ nhận ra ngón tay chạm đầu tiên.

Có gì sai trong mã của tôi?

Trả lời

15

Tôi tin rằng mã của bạn là mất tích hoạt động mặt nạ như:

switch (motionaction & MotionEvent.ACTION_MASK) { 
case MotionEvent.ACTION_POINTER_DOWN: 
} 

Mã này sẽ có thể kiểm tra ACTION_POINTER_DOWN.

Chúc may mắn & cho chúng tôi biết điều gì xảy ra.

Tommy Kwee

+0

Có vấn đề này. Thêm 'và' với ACTION_MASK đã giải quyết được sự cố. Điều khiến tôi tức giận là trong tài liệu chính thức không nói gì về điều đó. – Bemipefe

+0

Bernipefe, tôi cảm thấy cho bạn thưa ngài. Bất kỳ ai cũng có thể mắc lỗi trong tài liệu. Điều này có thể là một lỗi phổ biến bởi vì đôi khi bạn không cần phải che dấu. Đề xuất duy nhất của tôi cho lần tiếp theo là sử dụng trình gỡ lỗi để xem giá trị nào đang đến và xem liệu có bất kỳ giá trị nào là những gì bạn mong đợi hay không. Chúc may mắn cho một người hâm mộ Android khác! –

+0

Tôi có thể lấy ACTION_POINTER_UP và ACTION_POINTER_DOWN nhưng tôi không thể tìm cách lấy ACTION_MOVE. Tôi có thể lấy nó trong một chế độ ngón tay duy nhất trong người nghe xem nhưng khi tôi đặt ngón tay thứ hai trên màn hình điều duy nhất mà tôi có thể grup từ phương pháp onTouchEvent là UP và DOWN và không phải là hành động MOVE. Làm thế nào có thể sửa chữa nó? – Bemipefe

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