เค้าโครงที่กำหนดเองเมธอด onDraw () ไม่ได้รับการเรียก


91

ฉันกำหนดคลาสไว้ว่า:

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

และเรียกมันว่า:

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

แต่ในความเป็นจริงแล้วฟังก์ชัน TestMyFrameLayout.onDraw (Canvas canvas) ไม่ได้รับการเรียกทำไม?


คุณช่วยแสดงรหัสที่ใช้ประโยชน์ได้ไหม เพิ่ม@Overrideก่อน onDraw ด้วย: สิ่งนี้จะตรวจสอบการพิมพ์ผิดในคราส
Laurent '16

3
ขอบคุณ Laurent ' ปัญหาของฉันได้รับการแก้ไขแล้ว เพิ่ม this.setWillNotDraw (false);
old_hou

คำตอบ:


215

แก้ไขแล้ว. เพิ่ม this.setWillNotDraw(false); ในตัวสร้าง


25
อาจเป็นได้เฉพาะนักพัฒนาที่โกรธแค้นที่ตั้งค่าเป็นจริงตามค่าเริ่มต้น!
Narcís Calvet

5
@RyanShao สำหรับ ViewGroups ถูกตั้งค่าเป็น true ตามค่าเริ่มต้น
ataulm

1
ทำไมใครบางคนถึงต้องการให้มันเป็นจริง? ทำไม??
ไก่วัง

ฉันเดาว่าเป็นการเพิ่มประสิทธิภาพเมื่อ ViewGroup เป็นคอนเทนเนอร์ที่บริสุทธิ์โดยไม่มีอะไรให้วาดด้วยตัวมันเอง
hmac
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.