2011-06-08 148 views
7

我對Android編程和Java相當陌生(儘管我對C#有一些經驗,所以這很有幫助)。Android:似乎無法正確使用MotionEvent.ACTION_MOVE

在這一刻,我正在玩弄一些事情,去了解一切是如何工作的。我做了一個實現onTouchListener的活動。我已經覆蓋onTouch和對event.getAction()開關:

public boolean onTouch(View v, MotionEvent event) 
{ 
    float x; 
    float y;  

    switch (event.getAction()) 
    { 
     case MotionEvent.ACTION_DOWN: // gets called 
     { 
      x = event.getX(); 
      y = event.getY(); 
      circle c = new circle(this, x, y, 10, 0xFFFFFF); 
      _main.addView(c, tapCount++); 
      break; 
     } 
     case MotionEvent.ACTION_MOVE: // doesnt seem to do anything 
     { 
      x = event.getX(); 
      y = event.getY(); 
      circle c = new circle(this, x, y, 10, 0xFFFFFF); 
      _main.addView(c, tapCount++); 
      break; 
     } 
    } 
    return false; 
} 

凡「圓」是繪製一個圓形的一類。

當我將手指放在屏幕上時,我期望看到的是一圈圓圈。相反,當我開始觸摸時,這個圓圈纔會被繪製出來。

我將我的代碼與示例進行了比較(例如:Google的此博客:http://android-developers.blogspot.com/2010/06/making-sense-of-multitouch.html),我找不到我的錯誤。

編輯: 鏈接到滿級: http://pastebin.com/tVDQjQhu

編輯: 固定。必須在onTouch()函數中返回true。 D'哦!

回答

41

我在使用MotionEvent.ACTION_MOVE時遇到同樣的問題。 要使MotionEvent.ACTION_MOVE正常工作,請返回true而不是false。

+0

+1你知道爲什麼這是它的工作原理嗎?你能否指出我們的方向,這是有記錄的地方,哪裏會有解釋?謝謝! – Mzn 2012-03-26 18:35:34

+3

當您覆蓋onTouchEvent時,您的返回布爾值指示該事件是否已消耗。 – stealthcopter 2012-09-13 13:47:43

1

有同樣的問題也一樣,我不知道這是否是一個錯誤或沒有,但我設法使它加入OnClickListener的實施,貫徹public void onClick(View v)然後又在構造添加setOnClickListener(this)工作。

11

對於我的解決辦法是

return true 

在onTouch功能,你應該使用這個

public boolean onTouch(View v, MotionEvent event){ 
float x; 
float y;  

switch (event.getAction()) 
{ 
    case MotionEvent.ACTION_DOWN: // gets called 
    { 
     x = event.getX(); 
     y = event.getY(); 
     circle c = new circle(this, x, y, 10, 0xFFFFFF); 
     _main.addView(c, tapCount++); 
     break; 
    } 
    case MotionEvent.ACTION_MOVE: // doesnt seem to do anything 
    { 
     x = event.getX(); 
     y = event.getY(); 
     circle c = new circle(this, x, y, 10, 0xFFFFFF); 
     _main.addView(c, tapCount++); 
     break; 
    } 
} 
return true; //the problem was here 

}

當你從onTouch返回false(視圖V,MotionEvent事件),那麼只有MotionEvent.ACTION_DOWN將被調用。所以你應該從這個功能返回true

希望這是幫助