Kendi tanımlı Layout, onDraw () yöntemi çağrılmıyor


91

Böyle bir sınıf tanımladım :

public class TestMyFrameLayout extends FrameLayout{

    Paint mPaint;
    public TestMyFrameLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public TestMyFrameLayout(Context context) {
        super(context);
        mPaint = new Paint();
        mPaint.setColor(Color.GREEN);
    }

    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawCircle(50f, 50f, 30, mPaint);
    }   
}

ve şöyle adlandırdı:

TestMyFrameLayout myFrameLayout = new TestMyFrameLayout(this);
LayoutParams myFrameLayoutParams = new LayoutParams(300,300);
myFrameLayout.setLayoutParams(myFrameLayoutParams);
setContentView(myFrameLayout);

Ama aslında TestMyFrameLayout.onDraw (Canvas canvas) işlevi çağrılmıyor, neden?


Kullandığınız kodu gösterir misiniz? Ayrıca @OverrideonDraw'dan önce ekle : bu, tutulmada yazım hatasını kontrol edecektir.
Laurent '

3
Teşekkür ederim Laurent '. Sorunum zaten çözüldü. This.setWillNotDraw (false) ekleyin;
old_hou

Yanıtlar:


215

Çözüldü. Ekle this.setWillNotDraw(false); yapıcı içinde


25
Varsayılan olarak bunu doğru olarak ayarlayan yalnızca endişeli bir geliştirici olabilirdi!
Narcís Calvet

5
ViewGroups için @RyanShao varsayılan olarak true olarak ayarlanmıştır.
ataulm

1
Neden biri bunun doğru olmasını isteyecek? neden??
Kai Wang

Bunun kendisi için çizmek için bir ViewGroup hiçbir şey saf kabı olduğunda için bir optimizasyon olduğunu tahmin
hmac
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.