我正在为我的作业制作月球着陆器游戏
我有一个按钮并为其设置onTouchListener(不是onClick) 当按钮按下或ACTION_DOWN时,火箭飞起并在ACTION_UP上停止加速。
目前它只在ACTION_DOWN上执行一次,所以它的行为就像onClick按钮。
任何帮助将不胜感激
gView.mainThruster()调用游戏类中的方法,使太空飞船向上飞,例如Y - = 10;
mThrust = (Button) findViewById(R.id.mainThrustBtn);
mThrust.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN) {
if(fuel > 0){
gView.checkFuel(fuel);
gView.mainThruster();
mThrustSound.start();
fuel -= 0.5;
fuelGauge.setProgress((int)fuel);
}
}
else if(event.getAction() == MotionEvent.ACTION_UP){
mThrustSound.pause();
//mThrustSound.release();
}
else{
//do nothing
}
return true;
}
});
答案 0 :(得分:2)
文档清楚地说明了这一点:
在具有源类SOURCE_CLASS_POINTER的指点设备(如触摸屏)上,指针坐标指定绝对位置,例如视图X / Y坐标。每个完整的手势由一系列运动事件表示,其中动作描述指针状态转换和运动。手势以ACTION_DOWN的动作事件开始,该动作事件提供第一个指针向下的位置。当每个附加指针向下或向上时,框架将相应地生成带有ACTION_POINTER_DOWN或ACTION_POINTER_UP的运动事件。使用ACTION_MOVE通过运动事件描述指针移动。最后,当最终指针上升时,手势结束,如使用ACTION_UP的动作事件或使用ACTION_CANCEL取消手势时所示。
所以你应该期待获得一个ACTION_DOWN
个事件,然后是多个ACTION_MOVE
个事件。听起来基本上你需要回复ACTION_MOVE
如果你想要处理动作,如果你想在触摸时连续做某些事情,你可能想要一些计时器事件(因为你不会产生新的动作事件 - 只需触摸并按住就没有动作)。