2012-08-08 62 views
3

我想在Android的画布上有一个按钮,可以使图像弹出,一旦再次点击图像消失。如何在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); 
    } 
} 

上面的代码是我为我的代码后,这个一开始我用一些小的基本工具,像油漆和如上图所示,我已经延长的观点...林不知道我怎么可以把按钮

+1

你试过了什么? – 2012-08-08 07:00:54

回答

1

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

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

编辑: 什么@Andy Res建议在2)可能是你在找什么。将一个SurfaceView放在一个RelativeLayout中,并在同一个布局中有一个按钮。 或者你可以使用一个FrameLayout并在其中有一个SurfaceView和一个Button。

+0

如果他想要经典的窗口小部件按钮,那么您是正确的,但是有许多方法可以在surfaceview – WIllJBD 2012-08-08 07:38:51

+0

@ user1116836中创建您自己的按钮,您是对的,但那会推出自己的用户界面。 – vipsy 2012-08-08 07:42:10

+0

猜测这取决于他的技能水平,他想要什么,他愿意学什么;) – WIllJBD 2012-08-08 07:47:52

2

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

  1. 你要么画在画布上的一个按钮,这基本上是一个Bitmap图像,并点击检查,看是否指针坐标位于位图区域坐标内。

  2. 或者,将Canvas放入RelativeLayout中,并在其中添加Button控件。由于您位于RelativeLayout,因此Button将出现在Canvas之上。

+0

我已经得到了RelativeLayout,但由于某种原因,按钮没有出现在屏幕上..任何想法? – viper 2012-08-09 10:06:04

+0

很难猜测,不知道你在那里做了什么...... :)但是请确保您的RelativeLayout按钮位于画布下方,否则画布将位于按钮之上,因此您将无法看到它们。 – 2012-08-09 10:22:29

+0

当你说“确保RelativeLayout中的按钮位于画布下方时,否则画布将位于按钮之上,因此您将无法看到它们”,您是不是在xml中,如果是这样,那该怎么做因为我认为这是问题 – viper 2012-08-09 10:39:29

0

我这样做的方式,我用一个巴纽图形,然后我把它画到使用

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

其中图像是巴纽 Rect1的是目标位置画布在屏幕 RECT2按钮是我想使用 按钮的所述部分和所述涂料对象

然后在

@Overide 
    onTouchEvent(MotionEvent event) {} 

我把代码来检测,如果Rect1的边界内检测到一个运动事件最多(其中包含它是在屏幕上的目标位置

的话,我会叫我喜欢的东西

创建
Button1Clicked(); 

这是我在哪里处理点击。

+0

如何在画布上消除或减少按钮而在画布上制作按钮? – viper 2012-08-18 21:28:56

0

这是我做(对我的作品):

  • 画一个按钮,你的画布的位图。
  • 使用Android触摸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

+0

大家好,我可以请你帮我出来...我需要在我的画布上添加按钮,但由于某些原因,他们没有出现在屏幕上的AVD ......任何想法?我的编码有点不同,因为我已经扩展了Activity,并使用setContentView(new Draw(this))将其链接到扩展视图;我相信这是问题所在? – viper 2012-08-15 09:16:47

+0

请用您的代码更新您的问题,然后我将更好地了解您目前正在做什么以及可能是什么问题。 – 2012-08-15 14:18:14

+0

嗨有伙伴是好的,如果我可以给你发电子邮件给你的应用程序,我可以通过电子邮件详细解释它 – viper 2012-08-15 14:47:02

0

我也曾经有过类似的要求,并解决它在老式的方式

  1. 使用画布绘制一个按钮并记下按钮在所有四个角上的x和y坐标。
  2. 当用户触摸屏幕时,获取x和y坐标。
  3. 现在检查用户触摸的位置正在落在按钮位置坐标下。如果是,那么执行代码中的按钮功能,否则不要做任何事情
相关问题