Java 为什么我的onTouchEvent在不触摸屏幕的情况下被触发?
onTouchEvent方法总是说,当我第一次触摸屏幕时,事件为0 MotionEvent.ACTION\u DOWN。我不知道当我停止触摸屏幕时如何让它报告 stage变量告诉它在三个部分的过程开始、停止和释放中的点击号,这三个部分是为类似弹射器的游戏制作的 公共静态int stage=0 更新方法由主线程中下面的方法调用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
@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;
}