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ê?


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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.