Как создать интерактивную кнопку с ShapeDrawable? - PullRequest
1 голос
/ 18 августа 2010

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

Я создал класс, который расширяет класс 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 не могут быть «кликабельными», но я ожидал, что это сработает, так как я расширяю кнопку (которая является представлением и «кликабельной»).

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

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

1 Ответ

0 голосов
/ 20 августа 2010

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

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

Все еще не знаю, как это сделать, автоматически привязав событие, к которому прикоснулись, к кнопке. Если кто-нибудь знает, как это сделать, скажите, пожалуйста.

Спасибо.

...