Layout được xác định riêng, phương thức onDraw () không được gọi


90

Tôi đã định nghĩa một lớp như thế :

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

và gọi nó như:

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

Nhưng trên thực tế, hàm TestMyFrameLayout.onDraw (canvas canvas) không được gọi, tại sao?


Bạn có thể hiển thị mã nơi bạn sử dụng nó không? Cũng thêm @Overridetrước onDraw: điều này sẽ kiểm tra lỗi đánh máy trong nhật thực.
Laurent '

3
Cảm ơn Laurent '. Vấn đề của tôi đã được giải quyết. Thêm this.setWillNotDraw (false);
old_hou,

Câu trả lời:


211

Đã giải quyết. Thêm this.setWillNotDraw(false); vào hàm tạo


24
Nó có thể chỉ là một nhà phát triển giận dữ đặt nó thành true theo mặc định!
Narcís Calvet

2
tại sao điều này sẽ giúp ích?
RyanShao

5
@RyanShao cho ViewGroups nó được đặt thành true theo mặc định.
ataulm

1
Tại sao một người nào đó lại muốn nó thành sự thật? tại sao??
Kai Wang,

Tôi đoán đó là một sự tối ưu hóa khi ViewGroup là một vùng chứa thuần túy không có gì để vẽ cho chính nó
hmac
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.