2012-04-09 22 views
15

Tôi không quá rõ ràng về điều này và không phải là tài liệu.Tôi có cần gọi lại super.onDraw() trong chế độ xem tùy chỉnh không?

Khi tôi tạo ra một giao diện tùy chỉnh, tôi ghi đè như vậy:

@Override 
public void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 

    //more code here... 
} 

Câu hỏi của tôi là cho dù đó là cần thiết để gọi super.onDraw(canvas);. Mã này dường như hoạt động tốt mà không có nó, nhưng tôi muốn chắc chắn rằng nó là okay để bỏ nó ra.

Vì vậy, có cần thiết không?

+0

Không biết liệu nó có cần thiết hay không, nhưng đó là nguyên tắc thực hành tốt. – trutheality

+0

Bạn chỉ cần gọi 'super.onDraw()' nếu bạn muốn mã siêu lớp thực hiện để được thực thi. Nếu bạn không dựa vào việc vẽ lớp cha của 'View' tùy chỉnh (ví dụ: tất cả các bản vẽ được yêu cầu được thực hiện theo phương pháp overriden cục bộ của bạn), thì bạn không cần phải gọi nó, trừ khi tài liệu rõ ràng nói cách khác. –

Trả lời

13

Nếu bạn muốn nó gọi superclass onDraw method (nghĩ TextView hoặc KeyboardView chứ không phải là một View chung), sau đó gọi super.onDraw. Nếu bạn không muốn điều đó, tức là bạn đang có kế hoạch vẽ toàn bộ Chế độ xem cho chính mình (có vẻ như bạn đang ở), không có lý do gì để gọi nó.

Ngoài ra, nếu bạn đang mở rộng Chế độ xem (và không phải một số lớp mở rộng chế độ xem), super.onDraw không thực sự làm gì cả.

Đối với tôi, tôi gọi super.onDraw khi tôi muốn vẽ các đường trên Bàn phím. Vì vậy, super.onDraw vẽ bàn phím và LatinKeyboardView tùy chỉnh của tôi (mở rộng KeyboardView) vẽ đường quét trên đầu bàn phím.

+0

Có, tôi thứ hai là KeyboardView yêu cầu super.onDraw() nếu bạn muốn vẽ thêm bất kỳ thứ gì trên các phím. –

0

Không bắt buộc trừ khi bạn thực sự ghi đè phương pháp onDraw(). Nếu lớp mới không ghi đè nó, phương thức của siêu sẽ tự động được gọi.

+0

? Trong câu hỏi của tôi, tôi viết rõ ràng rằng tôi * đang * ghi đè lên nó ... – yydl

+0

@yydl sau đó có nó sẽ được. – Whymarrh

2

Vâng, đúng vậy. Nếu bạn tùy chỉnh TextView, super.onDraw sẽ đảm bảo vẽ bất kỳ thứ gì thuộc về thuộc tính TextView (như văn bản, màu văn bản, bóng văn bản, v.v ...) Tương tự với các Chế độ xem khác như Nút, Hộp kiểm ...

Trong trường hợp Chế độ xem tùy chỉnh của bạn mở rộng Chế độ xem (không phải lớp con cụ thể của Chế độ xem, chỉ cần Xem), vẫn tốt hơn là bỏ super.onDraw (canvas) ở đó cho một số phương thức vẽ của Chế độ xem (như setBackgroundDrawable, v.v.)

8

Xem nhanh mã nguồn cho thấy View.onDraw() là phương thức trống. Vì vậy, hãy gọi số super.onDraw(), nếu lớp gốc là View, thì không có gì. Nó không cần thiết nhưng vô hại.

Dù bạn có nên tiếp tục và thực hiện việc đó hay không là câu hỏi riêng về hiệu quả, an toàn và phong cách.

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