[RESOLVIDO] NinePatch e Text

4 respostas
eliangela

Olá!

Fiz uns botoes personalizados para Android e usei NinePatch, como mostra no site: [url]http://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch[/url]
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:
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);
	}
}

4 Respostas

Marky.Vasconcelos

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).

eliangela

Muito obrigada!

Não sabia que o onDraw escrevia o texto.

Resolvido:
@Override
	public void onDraw(Canvas canvas) {

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

		super.onDraw(canvas);
	}
eliangela

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

Marky.Vasconcelos

Boa.

Criado 11 de agosto de 2011
Ultima resposta 11 de ago. de 2011
Respostas 4
Participantes 2