【问题标题】:Getting the center Point of a MotionEvent Android获取 MotionEvent Android 的中心点
【发布时间】:2025-12-31 08:50:06
【问题描述】:

我需要计算 MotionEvent 的中心,例如,当用户用手指触摸屏幕时,我想知道 x,y 中的点是这个手指触摸的中心,我目前使用的是motionEvent。 getX() 和 motionEvent.getY() 但它似乎让我在手指触摸的最底部得到了一些点,这对我很不利.. 那么它是如何完成的呢?

【问题讨论】:

    标签: android touch motionevent


    【解决方案1】:

    在你的 OnTouchListener 中尝试这样的事情:

        @Override
        public boolean onTouch(View v, MotionEvent event)
        {
            float x = event.getX();
            float y = event.getY();
    
            if (event.getAction() == MotionEvent.ACTION_DOWN)
            {
                startX = x;
                startY = y;
            }
            else if (event.getAction() == MotionEvent.ACTION_UP)
            {
                centerX = (startX + x) / 2;
                centerY = (startY + Y) / 2;
            }
    
            return false;
        }
    

    其中 startX、startY、centerX、centerY 是可以从侦听器访问的字段变量。

    【讨论】:

      【解决方案2】:

      使用

      public static void midpoint(MotionEvent event, Point point) {
          float x1 = event.getX(0);
          float y1 = event.getY(0);
          float x2 = event.getX(1);
          float y2 = event.getY(1);
          midpoint(x1, y1, x2, y2, point);
      }
      
      public static void midpoint(float x1, float y1, float x2, float y2, Point point) {
          point.x = (x1 + x2) / 2.0f;
          point.y = (y1 + y2) / 2.0f;
      }
      

      从视图的 onTouchEvent 调用 midpoint(MotionEvent event, Point point)。

      【讨论】: