自己定义的Layout,onDraw()方法未调用


90

我定义了一个这样的类:

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之前添加:这将检查日食中的错字。
洛朗”

3
谢谢洛朗。我的问题已经解决。添加this.setWillNotDraw(false);
old_hou 2011年

Answers:


211

解决了。添加 this.setWillNotDraw(false); 构造函数


24
它可能只是一个焦虑不安的开发人员,默认情况下将其设置为true!
纳西斯卡尔韦

2
为什么会有帮助?
RyanShao 2015年

5
@RyanShao for ViewGroups默认情况下设置为true。
ataulm

1
为什么有人会希望它成为真实?为什么??
Kai Wang

我认为这是对ViewGroup是一个纯容器的优化,该容器本身没有内容可绘制
hmac
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.