2012-07-25 79 views
3

即时通讯有点卡在这个项目在Android即时通讯试图找出为什么这不起作用,但我不知道。这是顺便一个自定义视图,以防万一。Android Touch UP不能正常工作

问题是这个事件ACTION_DOWN完美地工作得到控制台调试“触摸1”和“触摸2”,但ACTION_UP,ACTION_CANCEL或默认:无法正常工作我无法弄清楚这一点,所以任何帮助将非常感激谢谢

 public void doTouch(MotionEvent event) 
     { 
      int action = event.getAction(); 

      float x = event.getX(); 
      float y = event.getY(); 

      switch(action) 
      { 
      case MotionEvent.ACTION_DOWN: 
       if(x < 125 && y < 125){ 
        for(AnimatedSprite a:mSprites) 
        { 
         if(a.getID() == 1) 
         { 
          a.AdvanceToFrame(0); 
          touching = true; 
          System.out.println("Touching 1"); 
          //touch_obj1 = true; 
         } 
        } 
       } 
       else if(x > getWidth()-125 && y > getHeight()-125) 
       { 
        for(AnimatedSprite a:mSprites) 
        { 
         if(a.getID() == 2) 
         { 
          a.AdvanceToFrame(1); 
          System.out.println("Touching 2"); 
          touching = true; 
          //touch_obj2 = true; 
         } 
        } 
       } 
       else 
       { 
        touching = false; 
       } 
       break; 
       case MotionEvent.ACTION_CANCEL: 
       case MotionEvent.ACTION_UP: 

        System.out.println("Touch UP"); 
        touching = false; 
        break; 

       default: 
        System.out.println("NOT Touching"); 
        touching = false; 
       break; 
      } 
     } 

这里是IM调用doTouch功能

public boolean onTouchEvent(MotionEvent event) 
     { 
      thread.doTouch(event); 
      return super.onTouchEvent(event); 
     } 
+0

你也可以说是呼唤你的'doTouch'方法的代码?具体来说,我想知道你是否从'onTouchEvent()'调用返回true。 – 2012-07-25 00:54:35

+0

以及我可以,但正如我所说ACTION_DOWN正在检测,但让我修改这个问题,所以我可以告诉你的代码 – Makenshi 2012-07-25 00:55:45

回答

14

它看起来像你的问题是你要处理的触摸事件onTouchEvent的方式。如果您想处理触摸事件,则需要从onTouchEvent返回true。因此,如果您得到ACTION_DOWN并从onTouchEvent返回false,系统将不会再向您发送任何与下一个ACTION_DOWN事件相关的触摸事件。

不知道你在做什么触摸事件,我不能给你一个解决方案,肯定会适合你的情况,但是如果你想接收除ACTION_DOWN以外的任何触摸事件,你将需要返回true从onTouchEvent

+0

对不起,我花了这么长的时间来回答,但虽然它确实逻辑,就像我说的actiondown完美的作品只是行动是不是工作这将是奇怪的,他们不返回真正的我猜,但也许我错了 – Makenshi 2012-07-26 07:36:40

+0

是的,正如我在我的答案中提到的,你将_always_获得'ACTION_DOWN',但你不会得到其他事件,除非你从' onTouchEvent'响应'ACTION_DOWN'事件。 – 2012-07-26 12:04:41

+0

好的谢谢你,因为这是有道理的,使它成为正确的答案 – Makenshi 2012-07-26 12:33:12

0

好,我得到这个固定的什么我需要做的就是这个

1)我改变了功能,所以它当然可以返回

boolean public bool doTouch(MotionEvent event) 

2)我在那结束返回真功能

3)调用它,当我这样做

public boolean onTouchEvent(MotionEvent event) 
    { 
     return doTouch(event); 
    }