Как создать кликабельную кнопку с помощью ShapeDrawable?

Я пытаюсь нарисовать фигуру на холсте и получить информацию о кликах, которые пользователь выполняет на этом холсте.

Я создал класс, который расширяет класс 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);
    }
  }

Затем в классе, который также расширяет View, я добавил экземпляр и прослушиватель:

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

Когда это выполняется, он не может обнаружить клики по изображению/кнопке. Я читал, что объекты ShapeDrawable не могут быть «кликабельными», но я ожидал, что это сработает, поскольку я расширяю кнопку (которая является представлением и «кликабельна»).

Это возможно? Если не так, можете ли вы указать мне какой-либо способ получить информацию о координатах экрана, которые были нажаты на Canvas или View ?

Заранее спасибо.


person MyName    schedule 17.08.2010    source источник


Ответы (1)


После некоторого поиска вот учебник, который показывает, как это сделать, используя положение касания экрана.

http://marakana.com/tutorials/android/2d-graphics-example.html

До сих пор не знаю, как это сделать, автоматически привязывая событие касания к кнопке. Если кто знает как это сделать, подскажите.

Спасибо.

person MyName    schedule 19.08.2010