在我正在开发的应用程序中,我有一个扩展表面视图的类,另一个用于处理所有计算的类,以确定应在屏幕上绘制对象的位置和时间。现在我有一种hacky方式来注册屏幕点击,每次点击都会解析对象列表,最近的对象会点击。当屏幕上只有3个或4个对象,但是当我有更多的点击注册错误的对象时,这种方法有效。
我想要做的是让屏幕上的对象扩展按钮类,这样我就可以在单击时将MotionEvent传递给它们。但是由于我所拥有的课程的设置方式,目前对我如何做到这一点有点困惑。
是否有人可能知道任何有关扩展按钮类以用于移动屏幕对象的教程?
答案 0 :(得分:1)
如果我理解正确,您是否正在尝试确定哪些对象已被点击?
我知道这不是你要求的,但是当我实现过去的自定义视图时,我通常会像这样处理点击检测:
我得到你想要点击的对象的x和y坐标。在SurfaceView类中的onTouchEvent(MotionEvent事件)方法中,使用一些if语句检查单击的x和y是否在对象的范围内。
这里有一些代码可以更好地说明我在说什么:
@Override
public boolean onTouchEvent(MotionEvent event)
{
// If the user touches the space occupied by object1
if(event.getAction() == MotionEvent.ACTION_DOWN
&& event.getX() <= object1.xPosition + object1.width
&& event.getX() >= object1.xPosition
&& event.getY() >= object1.yPosition
&& event.getY() < object1.yPosition + object1.height)
{
// The click was in the bounds of object1's current location
object1.doSomething();
}
// ......
}
希望这是有道理的并且有所帮助。
答案 1 :(得分:1)
我认为你有点混合。 Button通常用于布局(xml布局的东西)。当您使用表面视图时,您(很可能)需要实现自己的“按钮”。 但是,可能只是在表面视图顶部覆盖一个框架视图并将按钮放在该视图上。