2012-04-09 19 views
15

Bu konuda çok açık değilim ve dokümanlar da değil. Özel bir görünüm oluşturarak ettiğimdeÖzel görünümde super.onDraw() öğesini geri çağırmam gerekir mi?

, ben şöyle geçersiz:

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

    //more code here... 
} 

Sorum o super.onDraw(canvas); çağırmak gerekli olup olmadığıdır. Kod, onsuz iyi çalışıyor gibi görünüyor, ama ben onu dışarıda bırakmanın iyi olduğundan emin olmak istiyorum.

Bu yüzden gerekli mi?

+0

Gerekirse gerek yok, ama prensipte iyi bir uygulama. – trutheality

+0

Sadece superclass kodunun uygulanmasını gerektiriyorsa, 'super.onDraw()' işlevini çağırmanız yeterlidir. Çizime güvenmemeniz durumunda, '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'sınıfın, aksi takdirde açıkça belirtilmediği sürece, onu çağırmanız gerekmemektedir. –

cevap

13

Eğer superclass onDraw yöntemini çağırmak istiyorsanız (genel Görünüm yerine TextView veya KeyboardView düşünün), super.onDraw'u arayın. Eğer bunu istemiyorsan, yani tüm View görünümünü kendin çizmeyi planlıyorsun (ki öyle görünüyor), bunu aramak için bir sebep yok.

Ayrıca, Görünümü genişletiyorsanız (ve görünümü genişleten bir sınıf değil), super.onDraw gerçekten hiçbir şey yapmaz.

Benim için, bir KeyboardView üzerinden çizgiler çizmek istediğimde super.onDraw'u arıyorum. Yani, super.onDraw klavyeyi çiziyor ve özel LatinKeyboardView'um (Klavye Görünümünü genişletiyor) klavyenin üst kısmındaki kaydırma yolunu çiziyor.

+0

Evet, tuşlara fazladan bir şey çizmek istiyorsanız, KeyboardView'ın super.onDraw() gerektirdiğini söyleyebilirim. –

0

Aslında, onDraw() yöntemini geçersiz kılmadığınız sürece bu gerekli değildir. Yeni sınıf bunu geçersiz kılmazsa, üst yöntem otomatik olarak çağrılır.

+0

? Benim soruma açık bir şekilde yazdığımı açıkça yazdım: * – yydl

+0

@yydl o zaman evet olurdu. – Whymarrh

2

Evet, öyle. Bir TextView'a özel iseniz, super.onDraw, TextView özniteliklerine (metin, metin rengi, metin gölgesi vb. Gibi) ait olanı çizmeyi sağlayacaktır. Düğme, CheckBox gibi diğer görünümlerle aynıdır ...

Özel Görünümünüzün Görünümü (Görünümün belirli bir alt sınıfı değil, yalnızca Görüntüle) genişletmesi durumunda, bazı Görünümün çizim yöntemleri için (setBackgroundDrawable, vb ... gibi) super.onDraw (tuval) alanını bırakmak daha iyidir.

8

Kaynak koddaki bir bakışta, View.onDraw() boş bir yöntem olduğunu gösterir. Yani, super.onDraw() numaralı telefonu arayarak, üst sınıf View'un kendisiyse, hiçbir şey yapmaz. Bu gereksiz ama zararsızdır.

Devam etmeli ve devam etmeli, yine de ayrı bir verimlilik, güvenlik ve stil sorusudur.

İlgili konular