不会继续在ACTION_DOWN上执行语句

时间:2013-10-14 06:07:35

标签: java android events ontouchlistener

我正在为我的作业制作月球着陆器游戏

我有一个按钮并为其设置onTouchListener(不是onClick) 当按钮按下或ACTION_DOWN时,火箭飞起并在ACTION_UP上停止加速。

目前它只在ACTION_DOWN上执行一次,所以它的行为就像onClick按钮。

任何帮助将不胜感激

  • gView是所有魔术发生的游戏类的实例
  • 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;
         }
     });
    

1 个答案:

答案 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如果你想要处理动作,如果你想在触摸时连续做某些事情,你可能想要一些计时器事件(因为你不会产生新的动作事件 - 只需触摸并按住就没有动作)。