2013-06-29 19 views
25

Tôi đang bối rối bởi hai phương pháp trong Android. Nó dường như cả hai phương pháp đều cho bạn biết loại sự kiện đó là gì, tức là, cho dù đó là sự kiện xuống hay không.Trong Android, sự khác nhau giữa getAction() và getActionMasked() trong MotionEvent là gì?

Khi nào tôi sẽ sử dụng?

public void onTouchEvent(MotionEvent e) 

Đừng trích dẫn tài liệu xin vui lòng, vì tôi đọc nó và tôi không thấy bất kỳ thông số nào tôi có thể cung cấp cho một trong các phương pháp để có một thứ gì đó khác biệt.

public final int getAction() 

public final int getActionMasked() 

Trả lời

18

Vâng, cả hai đều trả lại hành động (Lên/Xuống vv), nhưng getAction có thể trả lại hành động với thông tin con trỏ, trong trường hợp các sự kiện có thể là một chút khác nhau . getActionMasked sẽ luôn trả về các hành động "đơn giản" với thông tin con trỏ "Masked out" (lấy nó?), sau đó bạn sẽ gọi getPointerIndex trên cùng một sự kiện để lấy chỉ mục của con trỏ. Lưu ý rằng bạn sẽ thường thấy điều này trên các thiết bị cảm ứng đa điểm có nhiều điểm tiếp xúc (con trỏ). Chỉ mục con trỏ về cơ bản là cách kết hợp các sự kiện với các điểm liên lạc để bạn có thể phân biệt chúng.

+0

thông tin con trỏ này là gì? –

+0

Các trường bit bổ sung trong giá trị trả lại; chỉ số hành động và con trỏ được trả về trong cùng một số nguyên.Android định nghĩa một tập hợp các mặt nạ bit để trích xuất chúng (mà về cơ bản là những gì getActionMasked làm) –

29

getAction() trả về id con trỏ và sự kiện (ví dụ: lên, xuống, di chuyển) thông tin.

getActionMasked() trả về chỉ một sự kiện (ví dụ: lên, xuống, di chuyển) thông tin. Các thông tin khác bị che khuất.

Ví dụ:

getAction() lợi nhuận 0x0105.
getActionMasked() sẽ trở lại 0x0005, đó là 0x0105 & & ACTION_MASK.

  1. Giá trị của ACTION_MASK là 0xFF. Nó che dấu các hành động sau đây.
    • ACTION_DOWN 0, UP 1, MOVE 2
    • ACTION_POINTER_DOWN 5, UP 6
  2. Giá trị của ACTION_POINTER_ID_MASK là 0xFF00. Nó che dấu ID con trỏ khỏi các hằng số không được chấp nhận.
    • ACTION_POINTER_1_DOWN 0x0005
    • ACTION_POINTER_2_DOWN 0x0105
    • ACTION_POINTER_3_DOWN 0x0205
    • ...
+0

Tôi chưa thấy nó: tại sao tôi lại muốn sử dụng getActionMasked()? không bao giờ có bất kỳ lợi thế hơn getAction()? – peedee

+3

@peedee Với 'getAction()', bạn phải bithift/mask để phân tách hai phần dữ liệu này; trong khi với 'getActionMasked()' và 'getActionIndex()', bạn nhận được chúng một cách riêng biệt (nhưng có lẽ với chi phí thời gian chạy cao hơn, do hai cuộc gọi hàm riêng biệt). Tôi sẽ tưởng tượng rằng đại diện kết hợp được trả về bởi 'getAction()' là những gì được sử dụng trong hệ điều hành Android, vì có hai giá trị kết hợp theo cách này sẽ tiết kiệm bộ nhớ và hiệu quả hơn trên phần cứng di động. cũng lưu trữ lịch sử các sự kiện chạm gần đây, vì vậy có thể có nhiều dữ liệu được lưu trữ .. –

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