[RESOLVIDO] NinePatch e Text

Olá!

Fiz uns botoes personalizados para Android e usei NinePatch, como mostra no site: http://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch
Os botoes estão funcionando muito bem, mas o texto não está aparecendo.

O que eu fiz de errado?

Abaixo segue meu código da minha classe Botao:

[code]public class Botao extends Button {

private boolean isPressed = false;

public Botao(Context context) {
	super(context);
	setText("teste");
}

@Override
public void onDraw(Canvas canvas) {
	Bitmap bitmap;

	if (isPressed) {
		bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.botaoselecionado);
	} else {
		bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.botaonormal);
	}

	NinePatchDrawable nine = new NinePatchDrawable(bitmap, bitmap.getNinePatchChunk(), new Rect(0, 0, getWidth(), getHeight()), "botao");
	setBackgroundDrawable(nine);
}

@Override
public boolean onTouchEvent(MotionEvent event) {
	if (event.getAction() == MotionEvent.ACTION_DOWN) {
		isPressed = true;
		invalidate();
	} else if (event.getAction() == MotionEvent.ACTION_UP) {
		isPressed = false;
		invalidate();
	}
	return super.onTouchEvent(event);
}

}[/code]

Primeiro, voce ai precisar chamar super.onDraw para ele desenhar o texto, mas voce está setando o background nesse método, e não deveria.

Voce devia usar esse drawable .9.png direto no XML no atributo background do seu botão.

Se quiser mesmo fazer pelo código, sete o background de fora do método onDraw (na verdade, nem faça nada nesse método).

Muito obrigada!

Não sabia que o onDraw escrevia o texto.

Resolvido:

[code] @Override
public void onDraw(Canvas canvas) {

	if (isPressed) {
		setBackgroundResource(R.drawable.botaoselecionado);
	} else {
		setBackgroundResource(R.drawable.botaonormal);
	}

	super.onDraw(canvas);
}[/code]

Melhor ainda!
Seguindo todos os conselhos do Marky.Vasconcelos, eu apaguei o método onDraw() e fiz isso no onTouchEvent():

@Override public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { setBackgroundResource(R.drawable.botaoselecionado); } else if (event.getAction() == MotionEvent.ACTION_UP) { setBackgroundResource(R.drawable.botaonormal); } return super.onTouchEvent(event); }

Funcionou mais perfeito ainda!
Obrigada

Boa.