Layout próprio definido, método onDraw () não sendo chamado

90

Eu defini uma classe assim:

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

e o chamou assim:

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

Mas, na verdade, a função TestMyFrameLayout.onDraw (Canvas canvas) não está sendo chamada, por quê?

old_hou
fonte
Você poderia mostrar o código onde você o usa? Adicione também @Overrideantes de onDraw: isso irá verificar se há erros de digitação no eclipse.
Laurent '16 de
3
Obrigado Laurent '. Meu problema já está resolvido. Adicione this.setWillNotDraw (false);
old_hou

Respostas:

211

Resolvido. Adicionar this.setWillNotDraw(false); construtor

old_hou
fonte
24
Só pode ter sido um desenvolvedor angustiado que definiu como verdadeiro por padrão!
Narcís Calvet
2
por que isso ajudaria?
RyanShao
5
@RyanShao para ViewGroups é definido como verdadeiro por padrão.
ataulm
1
por que diabos alguém vai querer que seja verdade? porque??
Kai Wang
Eu acho que é uma otimização para quando um ViewGroup é um contêiner puro sem nada para desenhar para si mesmo
hmac