代码之家  ›  专栏  ›  技术社区  ›  Shree Krishna

如何在action move android上禁用auto drawing onTouchEvent?

  •  1
  • Shree Krishna  · 技术社区  · 8 年前

    请查看从Overrided中获取的此代码示例 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框架的错误吗?

    此外:

    我下载了许多绘图应用程序 游戏商店 检查他们是否阻止了此类自动绘制。但所有的应用程序都和我的一样。

    如何解决此问题?

    2 回复  |  直到 8 年前
        1
  •  1
  •   顿顿是顿文    8 年前

    您只需添加 case MotionEvent.ACTION_POINTER_UP 并释放您的积分。 当你的案子 case MotionEvent。操作\u指针\u向上 ,此时,你竖起手指,程序将在action\u 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;
      }
    

    对不起,我的英语很差。

        2
  •  1
  •   Gabe Sechan    8 年前

    不管你怎么说 是 遇到多点触控事件。在Android中,最初的触地是ACTION\u down。第二次触摸是ACTION\u POINTER\u DOWN。此后,任何一个手指的任何移动,即使是单个像素,都会导致ACTION\u移动。所以你或多或少会得到不断的移动。解决方案是使用指针id来确定哪根手指是向下的第一根手指,并且只在移动时查看该指针id,而忽略其中的所有其他指针。

    推荐文章