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?


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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.