Android中的事件。如何捕获我的类/对象中的事件?

时间:2011-01-23 10:08:20

标签: android events

我正在尝试创建我的第一个Android应用程序,但这对我来说太神秘了,所以我在问。

我的程序使用FrameLayout和圈子。当我点击背景时,我想要一个新的圆圈出现。这很简单。在MainActivity我只设置了FrameLayout.setOnTouchListener。没关系。

但是当我触摸它时我也想删除圆圈。我的圈子有更多的属性,所以我创建了自己的类并命名为Ball。此Ball类扩展View类并实现OnTouchListener。比我添加方法:

boolean onTouch(View arg0, MotionEvent arg1)

它也有效。但是,如果我想在我的程序中捕获这两个事件(FrameLayout.onTouchBall.onTouch),那么只捕获一个事件。我点击的地方无所谓。我的程序总是我点击背景的东西。

我不知道该怎么做:(

像这样添加球(构造函数):

mPaint.setColor(c);
this.x = x;
this.y = y;
this.r = r;

构造函数被称为:

myNewBall = new Ball(x,y,r,c)

球被添加到FrameLayout:

myLayout.addView(currentBall);

你能帮帮忙吗?

2 个答案:

答案 0 :(得分:1)

您的Ball.onTouch()会返回true吗?如果是这样,您的Ball将使用该活动,并且不会通知FrameLayout

它应该返回false以向框架指示它应该继续调用其他处理程序。但是,这意味着您的Ball将无法获得与onTouch相关的后续事件。

另一种方法是让Ball.onTouch()另外运行同一个呼叫(称为常用方法?)为FrameLayout.onTouch()

http://developer.android.com/guide/topics/ui/ui-events.html

  

onTouch() - 此 返回布尔值 以指示 是否为您的侦听器消耗此事件 。重要的是这个事件可以有多个相互跟随的动作。因此,如果在收到向下操作事件时返回false,则表示您尚未使用该事件,并且对此事件的后续操作也不感兴趣。因此, 为活动中的任何其他操作调用,例如手指手势或最终的向上操作事件

答案 1 :(得分:0)

我不熟悉FrameLayout等,但听起来你必须这样做:

  1. 维护球对象的数组或链接列表。
  2. 在您的点击处理程序中,检查点击点是否在任何球内。
  3. 如果是,请移除那个球。
  4. 要确定点击点是否在圈内:

    ball position is ballx, bally
    click position is clickx, clicky
    
    for each ball:
      distx = clickx - ballx
      disty = clicky - bally
      dist = square root of (distx*distx + disty*disty)
      if (dist < ball radius) then click is within ball