Cómo crear un botón que se pulse con un ShapeDrawable?
-
29-09-2019 - |
Pregunta
Estoy tratando de dibujar una forma en un lienzo y obtener información sobre los clics que realiza el usuario en ese lienzo.
He creado una clase que extiende la clase Button.
class CustomDrawableButton extends Button {
private final ShapeDrawable mDrawable;
int x = 50;
int y = 50;
int width = 30;
int height = 30;
public CustomDrawableButton (Context context) {
super(context);
mDrawable = new ShapeDrawable (new OvalShape ());
mDrawable.getPaint().setColor(Color.GREEN);
mDrawable.setBounds(x, y, x + width, y + height);
}
protected void onDraw(Canvas canvas) {
mDrawable.draw(canvas);
}
}
A continuación, en una clase que también se extiende Vista, he añadido la creación de instancias y un oyente:
CustomDrawableButton mCustomDrawableButton = new CustomDrawableButton(getBaseContext());
layout.addView(mCustomDrawableButton);
mCustomDrawableButton.draw(canvas);
mCustomDrawableButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
System.out.println("Yey clicked");
Toast.makeText(view.getContext(), "Yey", Toast.LENGTH_LONG).show();
}});
Cuando se ejecuta esto, no es capaz de detectar los clics en el botón de imagen /. He leído que los objetos ShapeDrawable no pueden ser "hacer clic", pero yo estaba esperando que esto funcione, ya que estoy extendiendo el botón (que es una vista y es "hacer clic").
¿Es esto posible? Si no es así, ¿me puede dirigir a alguna forma de obtener información sobre las coordenadas de pantalla que fueron presionados en un lienzo o una Vista?
Gracias de antemano.
Solución
Después de buscar aquí hay un tutorial que muestra cómo se hacen utilizando por conseguir la posición de la pantalla tocado.
http://marakana.com/tutorials/android/2d-graphics -example.html
Todavía no sé cómo hacerlo uniéndose automáticamente el evento tocado un botón. Si alguien sabe cómo hacerlo, por favor decirlo.
Gracias.