我正在尝试创建我的第一个Android应用程序,但这对我来说太神秘了,所以我在问。
我的程序使用FrameLayout
和圈子。当我点击背景时,我想要一个新的圆圈出现。这很简单。在MainActivity
我只设置了FrameLayout.setOnTouchListener
。没关系。
但是当我触摸它时我也想删除圆圈。我的圈子有更多的属性,所以我创建了自己的类并命名为Ball。此Ball类扩展View
类并实现OnTouchListener
。比我添加方法:
boolean onTouch(View arg0, MotionEvent arg1)
它也有效。但是,如果我想在我的程序中捕获这两个事件(FrameLayout.onTouch
和Ball.onTouch
),那么只捕获一个事件。我点击的地方无所谓。我的程序总是我点击背景的东西。
我不知道该怎么做:(
像这样添加球(构造函数):
mPaint.setColor(c);
this.x = x;
this.y = y;
this.r = r;
构造函数被称为:
myNewBall = new Ball(x,y,r,c)
球被添加到FrameLayout:
myLayout.addView(currentBall);
你能帮帮忙吗?
答案 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等,但听起来你必须这样做:
要确定点击点是否在圈内:
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