如何使用 ShapeDrawable 创建可点击按钮?

Posted

技术标签:

【中文标题】如何使用 ShapeDrawable 创建可点击按钮?【英文标题】:How-to create a clickable Button with a ShapeDrawable? 【发布时间】:2010-08-17 22:43:51 【问题描述】:

我正在尝试在 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 对象不能是“可点击的”,但我希望这可以工作,因为我正在扩展按钮(这是一个视图并且是“可点击的”)。

这可能吗?如果不是这种方式,您能否指导我以某种方式获取有关在 Canvas 或 View 上按下的屏幕坐标的信息?

提前致谢。

【问题讨论】:

【参考方案1】:

经过一番搜索,这里有一个教程,展示了如何通过获取触摸屏位置来完成它。

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

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

谢谢。

【讨论】:

以上是关于如何使用 ShapeDrawable 创建可点击按钮?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Android ShapeDrawable 以编程方式绘制圆

android学习笔记33——资源ShapeDrawable

如何将可绘制的形状与图像一起使用?

画布之ShapeDrawable

如何创建可点击标签[关闭]

如何检测何时按下 Enter 或按下提交 [重复]