2012-07-25 112 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); 
    }