为什么在不触摸屏幕的情况下触发了我的onTouchEvent?

时间:2019-07-20 19:38:50

标签: java android touch-event

当我第一次触摸屏幕时,onTouchEvent方法总是说事件为0(MotionEvent.ACTION_DOWN)。当我停止触摸屏幕时,我不知道如何报告它。

stage变量告诉它在三部分过程(开始,停止和释放)中的抽头编号(用于游戏之类的弹射器)

public static int stage = 0;

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                stage++;
                System.out.println(stage);
                handleTouches();
                System.out.println(onTouchEvent(event));
                return onTouchEvent(event);
        }
        return true;
    }
    public void handleTouches() {
        if (stage == 1) {
            runPowerBar = true;

        } else if (stage == 2) {
            runPowerBar = false;
            tree.startAnimation();
            bg.startFlight(power);
        }
    }

    public void update() {
        tree.update();
        setCoins(context, 0);
        //setCoins(context, coins);

        if (runPowerBar) {
            powerBar.powerBarSlider();
        }
        System.out.println(runPowerBar);
    }

update方法由MainThread中的以下方法调用

 @Override
    public void run() {
        while (running) {
            canvas = null;

            try {
                canvas = this.surfaceHolder.lockCanvas();
                synchronized(surfaceHolder) {
                    this.gameView.update();
                    this.gameView.draw(canvas);
                }
            } catch (Exception e) {} finally {
                if (canvas != null) {
                    try {
                        surfaceHolder.unlockCanvasAndPost(canvas);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

我希望onTouchEvent告诉我,当我不触摸时动作会下降,而当我不触摸时会上升,但动作保持在0不变。

更新7/22:

好吧,经过一些测试,我发现更新方法仍然可以运行,但是 第一次点击时,我的绘制方法将冻结,第二次点击后,它会恢复。现在也说我放开水龙头。

1 个答案:

答案 0 :(得分:1)

似乎那里有一个递归函数,您以onTouchEvent事件递归调​​用ACTION_DOWN

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                //Start of touch events 
                stage++;
                System.out.println(stage);
                handleTouches();
                System.out.println(onTouchEvent(event));
                //return onTouchEvent(event);
                return true;
            case MotionEvent.ACTION_UP:
                // End of touch events
                return true;
            case MotionEvent.ACTION_MOVE:
                // Moved touch events
                return true;
        }
        return true;
    }