1

我正在学习如何做一个简单的游戏,我有一个 MainActivity 类,我在其中实现了 onTouchListener,然后我有一个 GameLoop 类,它扩展了 SurfaceView 并实现了 Runnable。GameLoop 类还处理其余的类,如移动精灵的管理器类。在 GameLoop 类中完成了画布上的绘图工作。

我需要做的是用我的指尖画线,但我不确定我应该如何处理来自 onTouchListeners 的值才能画线。我想如果我在 MainActivity 中有 onTouchListener 它将不起作用!?而且我想我无法将它实现到 GameLoop 类,因为我已经实现了 Runnable!?

如果我已经在实现其他东西,如何将 onTouchListener 实现到 GameLoop 类?我想我不能实现多个接口?当我尝试时,我在 Eclipse 中遇到错误!

4

2 回答 2

1

Java 类只能扩展一个类,但它可以实现任意数量的接口。只需用逗号分隔您希望在类声明中实现的接口名称:

public MyClass extends BaseClass implements OnClickListener, OnTouchListener, FooListener

您还可以使用匿名侦听器:

someView.setOnTouchListener(new OnTouchListener() {

    @Override
    boolean onTouch(View v, MotionEvent event) {
        // do something
    }
});

另一种选择是在您的 Activity 中覆盖onTouchEvent()并将运动事件传递给您希望处理触摸事件的任何类。

于 2013-04-28T06:47:43.923 回答
0

在您的手指正在绘制的视图上实现您的侦听器,使用setOnTouchListener()并传入您的侦听器类。由于您知道MotionEvent传入了一个对象,onTouch()因此您需要通过使用event.getX()event.getY()确定您的指针(在本例中为您的手指)在屏幕上的位置来利用该对象。请注意,如果您需要该功能,则需要特意处理多点触控。这些都记录在这里

在你的活动中附加你的监听器,你可以将该MotionEvent对象传递给你的视图以提取有用的信息并调用你在视图对象中定义的绘图方法和invalidate(). 这假设您希望将所有绘图方法集中在该视图类中。

或者,您可以直接在您的活动中绘制东西,可能会添加一些新视图或其他东西。只要您拥有MotionEvent对象,您就会拥有指针(手指)的坐标,并且可以使用该信息进行绘制。

您想要setOnTouchListener()的活动很可能是与您画线的视图直接关联的活动,或者通过对该视图的相对持久引用,或者通过使用绑定到该视图setContentView()

你不能在 Java 的同一个类中实现多个接口。这不是 Eclipse 或 ADT 问题。但是,如果您确实想这样做,请扩展接口并向其添加新内容。使用继承,您实际上可以将多个接口添加在一起。

于 2013-04-28T20:21:46.240 回答