Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的onTouchEvent在不触摸屏幕的情况下被触发?_Java_Android_Touch Event - Fatal编程技术网

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

Java 为什么我的onTouchEvent在不触摸屏幕的情况下被触发?,java,android,touch-event,Java,Android,Touch Event,onTouchEvent方法总是说,当我第一次触摸屏幕时,事件为0 MotionEvent.ACTION\u DOWN。我不知道当我停止触摸屏幕时如何让它报告 stage变量告诉它在三个部分的过程开始、停止和释放中的点击号,这三个部分是为类似弹射器的游戏制作的 公共静态int stage=0 更新方法由主线程中下面的方法调用 @Override public void run() { while (running) { canvas = null

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

stage变量告诉它在三个部分的过程开始、停止和释放中的点击号,这三个部分是为类似弹射器的游戏制作的

公共静态int stage=0

更新方法由主线程中下面的方法调用

 @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方法仍然在运行,但是
我的绘制方法在第一次点击时冻结,第二次点击后恢复。现在它还说,当我释放一个点击时。

这里似乎有一个递归函数,您递归地调用带有ACTION\u 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;
    }

考虑OnTouChistLeNel.你在ToucChink EntEnter上调用日志的打印,我不认为这是有意的,谢谢,我把所有的都删除了,它现在等待我在它走之前点击,唯一的事情是它暂停所有的东西直到我再次点击。哦,不,你的首要问题是你返回OnTouChEngEnter。我刚刚添加了其他案例来展示一个示例,因为您说当屏幕触摸停止时,您不知道如何获取报告。好的,谢谢,它现在等待触摸,只是它暂停所有其他操作,直到我再次点击。有什么帮助吗?什么意思,它会暂停一切?你的意思是,UI线程冻结,你得到一个ANR,或者你有一个特定的动画或停止的东西吗?在更新方法中,我有System.out.printlrunpowerbar;这会一直输出false直到我点击,然后它会停止输出这个消息直到我再次点击。基于此,我认为有些东西冻结了,因为我的更新方法停止了运行。我也有一种方法,在第一次点击后前后移动电源条选择器,但它只是保持静止。我知道这是可行的,因为在第一次点击后,它出现在与上次不同的位置。你在哪里调用这个更新方法,它做什么。将代码添加到问题中。

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

        if (runPowerBar) {
            powerBar.powerBarSlider();
        }
        System.out.println(runPowerBar);
    }
 @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();
                    }
                }
            }
        }
    }
    @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;
    }