Android:似乎无法正确使用MotionEvent.ACTION_MOVE

问题描述:

我对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'哦!

我在使用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

有同样的问题也一样,我不知道这是否是一个错误或没有,但我设法使它加入OnClickListener的实施,贯彻public void onClick(View v)然后又在构造添加setOnClickListener(this)工作。

对于我的解决办法是

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

希望这是帮助