Layout yang ditentukan sendiri, metode onDraw () tidak dipanggil

90

Saya mendefinisikan kelas seperti itu:

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);
    }   
}

dan menyebutnya seperti:

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

Tapi sebenarnya fungsi TestMyFrameLayout.onDraw (Canvas canvas) tidak dipanggil, kenapa?

old_hou
sumber
Bisakah Anda menunjukkan kode di mana Anda memanfaatkannya? Tambahkan juga @Overridesebelum onDraw: ini akan memeriksa kesalahan ketik di gerhana.
Laurent '16
3
Terima kasih Laurent '. Masalah saya sudah terpecahkan. Tambahkan this.setWillNotDraw (false);
old_hou

Jawaban:

213

Terpecahkan. Tambahkan this.setWillNotDraw(false); konstruktor

old_hou
sumber
24
Itu hanya bisa menjadi pengembang yang diliputi kecemasan yang mengaturnya menjadi benar secara default!
Narcís Calvet
2
mengapa ini membantu?
RyanShao
5
@RyanShao untuk ViewGroups itu disetel ke true secara default.
ataulm
1
mengapa seseorang ingin itu menjadi kenyataan? Mengapa??
Kai Wang
Saya rasa ini adalah pengoptimalan saat ViewGroup adalah wadah murni tanpa ada yang menarik untuk dirinya sendiri
hmac