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.