簡體   English   中英

為什么在不觸摸屏幕的情況下觸發了我的onTouchEvent?

[英]Why is my onTouchEvent being triggered without touching the screen?

第一次觸摸屏幕時,onTouchEvent方法始終說事件為0(MotionEvent.ACTION_DOWN)。 當我停止觸摸屏幕時,我不知道如何報告它。

階段變量告訴它在三部分過程中(開始,停止和釋放)它處於哪個抽頭編號(用於像游戲這樣的彈射器)

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);
    }

更新方法由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:

好吧,經過一些測試,我發現update方法仍然可以運行,但是第一次繪制時凍結了draw方法,而在第二次單擊后又恢復了繪制方法。 現在也說我放開水龍頭。

似乎那里有一個遞歸函數,您遞歸調用onTouchEvent帶有ACTION_DOWN事件的onTouchEvent

    @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;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM