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.