2011-06-17 42 views
22

Tôi đang triển khai TextView tùy chỉnh và tôi muốn thực hiện một số hành động khi chế độ xem được chạm vào. Tôi đã tìm ra phương pháp onTouchEvent sẽ cung cấp cho tôi đầy đủ các chế độ xem mà không cần phải sử dụng setOnTouchListener (Tôi đang cố gắng thực hiện tất cả công việc của mình bên trong chế độ xem thay vì trong hoạt động sao cho di động), nhưng sự kiện chạm duy nhất đã đăng ký là ACTION_DOWN. Nếu tôi đặt một OnTouchListener trong hoạt động bằng cách sử dụng điều này, tôi nhận được đầy đủ các sự kiện chạm, nhưng onTouchEvent thì không.View.onTouchEvent chỉ đăng ký sự kiện ACTION_DOWN

Bất cứ ai biết tại sao trường hợp này xảy ra hoặc bất kỳ ai có thể cung cấp cho tôi giải pháp không liên quan đến việc sử dụng setOnTouchListener (Điều gì sẽ ngăn hoạt động triển khai thiết lập người nghe riêng của mình)?

Trả lời

55

Bạn cần phải trả lại giá trị true để nhận các sự kiện sau đây sau khi xuống.

+1

Nếu tôi làm điều đó, thì mọi người nghe bấm/bấm được áp dụng từ hoạt động này sẽ không bao giờ được kích hoạt. Tôi không muốn tắt chức năng. Tôi chỉ muốn ngăn chặn bất kỳ xúc chạm nào trước khi chúng được gửi đi, nhưng vẫn gửi chúng đi. Gọi 'dispatchTouchEvent' chỉ cần gọi' onTouchEvent' một lần nữa, gây ra tràn ngăn xếp (lol). –

+2

Nếu bạn đang ở trong một thùng chứa ViewGroup, bạn có thể ghi đè lênInterceptTouchEvent() để giám sát các sự kiện cảm ứng được gửi đến con bạn. Bên cạnh đó (hoặc trực tiếp hooking vào dispatchTouchEvent - không khuyến khích), bạn không thể làm những gì bạn muốn. MotionEvent phái được dựa trên việc tìm kiếm một mục tiêu thông qua người nhận đầu tiên trả về true và sau đó gửi tất cả các sự kiện sau đến mục tiêu đó. – hackbod

+0

Đủ công bằng. Tôi đoán những gì tôi cần biết sau đó là làm thế nào để có một người nghe cảm ứng trên một cái nhìn tùy chỉnh mà không cho phép các lớp thực hiện để có người nghe cảm ứng đầy đủ chức năng của riêng mình, nhưng bạn đã chắc chắn trả lời câu hỏi trong tiêu đề. –

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