3

我想在 android 上的画布上有一个按钮,它可以弹出一个图像,然后再次单击图像消失。

public class Charts extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new Draw(this));
    }
}

private class Draw extends View {
    public Draw(Context context) {
        super(context);
    }

    public void onDraw(Canvas canvas) {
        super.onDraw(canvas);
    }
}

上面的代码是我的代码的开始,在此之后我使用了一些小的基本工具,如绘画,如上所示,我扩展了视图......我不确定如何放置按钮

4

5 回答 5

2

我不知道这是否可能,但我看到了 2 个选项:

  1. 您可以在画布上绘制一个按钮,这基本上是一个Bitmap图像,然后单击检查指针坐标是否在位图区域坐标内。

  2. 或者,将您Canvas放入 aRelativeLayout并在其中添加一个 Button 控件。既然你在a RelativeLayoutButton就会出现在a上Canvas

于 2012-08-08T07:35:53.383 回答
1

Canvas 不是视图,SurfaceView 是视图。您可以将 Button(或任何其他视图)放在 ViewGroup 中。所有布局,如 LinearLayout、RelativeLayout 等都是 ViewGroup,其中包含一个或多个 View 子项。

我相信您想在 SurfaceView 中放置一个 Button。您不能在 SurfaceView 中放置一个按钮,但您可以做的是,设计您的 UI,使其在布局中有一个 SurfaceView,并且在它附近有一个您想要单击的按钮。

编辑:@Andy Res 在 2) 中建议的内容可能是您正在寻找的内容。将 SurfaceView 放在 RelativeLayout 中,并在相同布局中有一个按钮。或者您可以使用 FrameLayout 并在其中包含 SurfaceView 和 Button。

于 2012-08-08T07:34:17.883 回答
0

这就是我的做法(对我有用):

  • 在画布上绘制按钮的位图。
  • 使用 Android touch api,检测触摸坐标是否在位图 dst rec 中。
  • 如果上述结果属实,则在画布上绘制您希望“弹出”的位图。

我希望这能让您更好地了解如何执行此操作。

更新:

private class Draw extends View implements OnTouchListener {
    Rect button = new Rect(); // Define the dimensions of the button here
    boolean buttonClicked;

    public Draw(Context context) {
        super(context);
    }

    public void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if (buttonClicked == true) {
            canvas.drawBitmap(source, null, button, null); 
                    // Source will be a that of a clicked button bitmap
        } else {
            canvas.drawBitmap(source, null, button, null); 
                    // Source will be a that of a non clicked button bitmap
        }

    }

    @Override
    public boolean onTouch(View view, MotionEvent event) {
        if (button.contains(event.getX(), event.getY())) {
            buttonClicked = true;
        } else {
            buttonClicked = false;
        }

        return true;
    }

}

PS:代码不工作的时候不要惊慌,我没有测试过。不知道你是如何渲染你的视图,我建议你移动 SurfaceView 并创建一个渲染线程,这里有一个教程:http ://www.edu4java.com/androidgame.html

于 2012-08-08T08:01:55.687 回答
0

我也有类似的要求并以老式的方式解决了它

  1. 使用画布绘制一个按钮,并记下按钮在所有四个角上的 x 和 y 坐标。
  2. 当用户触摸屏幕时,获取 x 和 y 坐标。
  3. 现在检查用户触摸的位置是否落在按钮位置坐标下。如果是,则在代码中执行按钮功能,否则不做任何事情
于 2013-12-09T13:27:53.747 回答
0

我这样做的方式是使用 .png 图形,然后使用

    canvas.drawbitmap(image, rect1, rect2, paint);

其中 image 是 .png rect1 是屏幕上按钮的目标位置 rect2 是我要使用的按钮部分和绘制对象

然后在

    @Overide 
    onTouchEvent(MotionEvent event) {}

我输入代码来检测是否在 rect1 边界内检测到运动事件向上(其中包含它在屏幕上的目标位置

然后我会打电话给我创造的东西

    Button1Clicked();

这是我将处理点击的地方。

于 2012-08-08T07:36:23.530 回答