如何在动作移动android时禁用自动绘图onTouchEvent?

时间:2018-03-09 06:22:47

标签: android android-view ontouchevent graph-drawing

请查看从onTouchEvent的重写View中获取的此代码示例,

@Override
public boolean onTouchEvent(MotionEvent event) {

    float eventX = event.getX(); 
    float eventY = event.getY();    

    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            //code move pointer position
            break;

        case MotionEvent.ACTION_MOVE:
            // code to draw line from x to y
            break;

        case MotionEvent.ACTION_UP:
             //Release pointer
             break;
        default:
            return false;
    }
}

这画得很好,但问题是当我用一根手指触摸一个角落并用另一根手指触摸屏幕的下一个角落并按住它然后松开第一根手指。它从一个手指到另一个手指自动绘制线条。但在我的应用程序中,用户必须使用单指手动绘制线条。

以下是发生的事情

为了克服这个问题,我尽我所能。它不是Multitouch事件。

这是Android框架的错误吗?

此外:

我从 Playstore 下载了许多绘图应用,以检查他们是否阻止了此类自动绘图。但是所有应用程序的行为与我的相同。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

尽管你说的是, 正在进行多点触控事件。在Android中,初始触摸是ACTION_DOWN。第二次触摸是ACTION_POINTER_DOWN。之后的任何移动,即使是单个像素,任何一个手指都将导致ACTION_MOVE。所以你或多或少得到不断的动作。解决方案是使用指针id来确定哪个手指是第一个手指向下,并且只有在你获得MOVE时才查看该指针id,忽略其中的所有其他指针。

答案 1 :(得分:1)

您只需添加case MotionEvent.ACTION_POINTER_UP并释放您的积分。 当你的情况在case MotionEvent.ACTION_POINTER_UP,此时,你的手指,程序将在action_move中运行,此时,你刚刚中断此动作。
我的例子是这样的:

  boolean isRelease = false;
  @Override public boolean onTouchEvent(MotionEvent event) {
    switch (event.getAction()) {
      case MotionEvent.ACTION_DOWN:
        isRelease = false;
        //code move pointer position
        break;
      case MotionEvent.ACTION_MOVE:
        if (isRelease) {
          return true;
        }
        // code to draw line from x to y
        break;
      case MotionEvent.ACTION_POINTER_UP:
        isRelease = true;
        //Release pointer
        break;
      case MotionEvent.ACTION_UP:
        isRelease = true;
        //Release pointer
        break;
    }
    return true;
  }
抱歉我的英语不好。