2010-09-29 10 views
12

Tôi có chế độ xem tròn và lơ lửng phía trên (-> theo hướng trục z ra khỏi màn hình) nội dung chính. Khi ai đó chạm vào màn hình, tôi muốn nội dung chính được chọn hoặc chế độ xem lơ lửng ở trên, khi nó bao gồm chế độ xem chính.Android: tôi có thể tạo chế độ xem/canvas không phải là hình chữ nhật hay không, nhưng ví dụ: tròn?

Cho đến nay hoạt động hoàn hảo. Tôi có một vật có hình tròn trên một tấm vải trong suốt. Có nghĩa là bạn có thể thấy tất cả mọi thứ của nền bên ngoài vòng tròn đó. Tuy nhiên, bạn không thể chọn nó, bởi vì nó vẫn là canvas lơ lửng, chỉ với một lớp sơn trong suốt.

Bây giờ tôi tự hỏi, để giải quyết vấn đề này, nếu nó có thể làm cho khung nhìn/khung hình chính nó?


Cập nhật

tôi đã thêm một hình ảnh cho lời giải thích rõ hơn những gì tôi cố gắng để đạt được. alt text

+0

bạn có thể tự mình xử lý phát hiện va chạm, nhận XY trên sự kiện chạm và nếu bên ngoài bán kính không xử lý đầu vào không? – schwiz

+0

Vâng, tôi đã có điều đó. Tuy nhiên, tôi muốn sự kiện chạm được xử lý bởi lớp chính trong nền, ví dụ: hộp văn bản. – znq

+0

Nếu bạn trả về false trên sự kiện chạm, nó sẽ chuyển ngay cả sự kiện đó sang dòng tiếp theo. Đôi khi điều này rất khó thực hiện một cách chính xác tùy thuộc vào hệ thống phân cấp bố cục nhưng bạn đang đi đúng hướng. Nếu bạn đăng các tệp xml bố cục và trình nghe onTouch của mình, chúng tôi có thể tìm ra điều gì đó. – schwiz

Trả lời

4

Theo như tôi biết - điều đó là không thể. Tôi đã kiểm tra các nguồn của View.java tại git.kernel.org và nó được dựa trên lớp Rect - rects xác định vị trí, kích thước, khu vực để vô hiệu hóa vv ("Hình dạng của một khung nhìn là của một hình chữ nhật." - từ các bình luận trong View.java)

Đối với lớp Canvas - nó thường được xây dựng trên Bitmap hoặc GL. Bitmap chắc chắn là một rectange (một ma trận), do đó, canvas dường như đại diện cho một rectange quá. Nếu sử dụng GL một khung nhìn được chỉ định (cũng là một hình chữ nhật).

Dường như đây là cách rõ ràng nhất để kiểm tra xem các tọa độ được chuyển đến phương thức onTouch() của bạn có phù hợp với bạn và trả về false nếu không. Sau đó, sự kiện sẽ được chuyển đến Chế độ xem bên dưới và sự kiện sẽ xử lý sự kiện.

+1

Cảm ơn zserge cho câu trả lời chi tiết. Điểm cuối cùng được đề cập là chính xác những gì tôi đang làm bây giờ, nhưng tôi có một số vấn đề khác với điều đó, mà tôi đã mô tả ở đây: http://stackoverflow.com/questions/3832893/android-delegate-touch-event-to- chế độ xem underlaying – znq

-3

Bạn cần chỉ định Android Selector để tránh hình ảnh lơ lửng mặc định.

+0

Có lẽ tôi đã không giải thích chính xác, nhưng tôi đã thêm một hình ảnh để làm rõ. Tôi không nghĩ rằng Selector là giải pháp cho điều đó, nhưng nếu tôi sai, hãy cho tôi biết. – znq

+0

Bạn có thể giải thích vòng tròn đó là gì không? đó là một hình ảnh nó phải được hiển thị luôn luôn? nó nên có một bộ chọn? Tôi có thể truy cập nó bằng cách sử dụng dpad? – Macarse

+0

Vòng tròn là một loại "cửa sổ bật lên" lơ lửng trên lớp chính. Nó nằm trên trục z ra khỏi màn hình phía trên chế độ xem nội dung chính. Bạn có thể nhìn thấy nó như một AlertDialog, nhưng tròn thay vì hình chữ nhật và khả năng để chọn các mục từ nền. – znq

1

Có lẽ không liên quan đến người hỏi ban đầu nữa, nhưng đối với bất kỳ ai vẫn đang tìm kiếm, có vẻ như điều này sẽ được thêm vào trong L: https://developer.android.com/preview/material/views-shadows.html#clip. Phương pháp View.setClipToOutline cho phép bạn cắt chế độ xem thành hình chữ nhật, hình tròn hoặc hình chữ nhật tròn có thể vẽ được.