如何在android中的画布上创建一个按钮,并将该按钮链接到图像以显示/隐藏?

时间:2012-08-08 06:48:14

标签: android canvas

我想在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);
    }
}

上面的代码就是我的代码的开头,之后我使用了一些像涂料这样的小基本工具,如上所示,我已经扩展了视图...我不知道如何放置按钮

5 个答案:

答案 0 :(得分:2)

我不知道这是否可行,但我看到两个选项:

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

  2. 或者,将Canvas放入RelativeLayout并添加一个Button控件。由于您位于RelativeLayoutButton将显示在Canvas上。

答案 1 :(得分:1)

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

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

编辑: @Andy Res在2)中建议的可能就是你要找的东西。将SurfaceView放在RelativeLayout中并使用相同布局的按钮。 或者您可以使用FrameLayout并在其中包含SurfaceView和Button。

答案 2 :(得分:0)

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

将其绘制到画布上
    canvas.drawbitmap(image, rect1, rect2, paint);

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

然后在

    @Overide 
    onTouchEvent(MotionEvent event) {}

我输入代码来检测是否在rect1边界内检测到一个Motion Event Up(其中包含它在屏幕上的目标位置

然后我会打电话给我创建的像

    Button1Clicked();

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

答案 3 :(得分:0)

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

  1. 使用画布绘制一个按钮,并在所有四个角上记下按钮的x和y坐标。
  2. 当用户触摸屏幕时,获得x和y坐标。
  3. 现在检查用户触摸位置是否位于按钮位置坐标下方。如果是,则执行代码中的按钮功能,否则不执行任何操作

答案 4 :(得分:-1)

这就是我的工作方式(对我有用):

  • 在画布上绘制按钮的位图。
  • 使用Android touch API,检测触摸坐标是否在 bitmaps 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