如何用ShapeDrawable创建一个可点击的按钮?

时间:2010-08-17 22:43:51

标签: android view android-canvas

我正在尝试在Canvas上绘制一个形状,并获取有关用户在该Canvas上执行的点击的信息。

我创建了一个扩展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对象不能“可点击”,但我希望这可以工作,因为我正在扩展Button(这是一个View并且是“可点击的”)。

这可能吗?如果不是这样,你可以指导我某种方式获取有关在画布或视图上按下的屏幕坐标的信息吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

经过一些搜索后,这是一个教程,通过获取触摸的屏幕位置来显示如何使用它。

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

仍然不知道如何通过将触摸的事件自动绑定到按钮来实现。如果有人知道该怎么做,请说出来。

感谢。