按下画布时如何调用方法

时间:2019-10-16 11:28:51

标签: java android

我正在用车辆进行游戏,我想在按下画布这样的东西的同时移动这辆车,但这是行不通的。

public boolean onTouch(View v, MotionEvent event) {

    if (event.getX() > 0 && event.getX() < 150 && event.getY() > 550 && event.getY() < 700) {

           do{

              System.out.println("Hallo");

              }while (canvas.isPressed());

        return false;

但我只是得到以下输出:

D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
I/System.out: Hallo

有什么主意吗?

2 个答案:

答案 0 :(得分:1)

设置一个全局布尔值,以知道何时接收到MotionEvent.ACTION_DOWN事件。

   mUserTouched = true; // Set to true when MotionEvent.ACTION_DOWN
   mUserTouched = false; // set to false when MotionEvent.ACTION_UP is received

然后,您可能希望使用Timer或其他一些会在收到MotionEvent.ACTION_DOWN时首先启动的循环程序。并根据某个时间间隔触发对invalidate()的呼叫。 invalidate()将导致View.onDraw()被调用,以便您可以重新绘制汽车的位置。收到MotionEvent.ACTION_UP时,取消Timer

如果存在界限,则每当mUserTouched = false'出现在界限之外时,您还需要设置MotionEvent

答案 1 :(得分:0)

可以在onTouchonTouchEvent中完成,就像这样:

        @Override
        public boolean onTouchEvent(MotionEvent motionEvent) {

            switch (motionEvent.getAction() & MotionEvent.ACTION_MASK) {

                    // Player has touched the screen
                case MotionEvent.ACTION_DOWN:

                    System.out.println("Hallo");

                    break;

                    // Player has removed finger from screen
                case MotionEvent.ACTION_UP:

                    break;
            }
            return true;
        }