当我第一次触摸屏幕时,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:
好吧,经过一些测试,我发现更新方法仍然可以运行,但是 第一次点击时,我的绘制方法将冻结,第二次点击后,它会恢复。现在也说我放开水龙头。
答案 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;
}