将本机UIManager.measureInWindow坐标反应为android MotionEvent坐标

时间:2019-07-12 21:16:33

标签: javascript java android react-native

我正在使用一个本机函数,该函数可以使用从MotionEvent获得的坐标正常工作:

    @Override
    public boolean onTap(MotionEvent e) {

        int x = Math.round(e.getX());
        int y = Math.round(e.getY());
        myFunction(x, y);
    }

我需要做的是在react native中获取视图的坐标以能够使用相同的java函数。出于某种原因,当我使用量度视图位置时,x和y似乎与MotionEvent e.getX()和e.getY()的比例不同。

这是我在我的React Native组件中使用的

UIManager.measureInWindow(findNodeHandle(this.view),
      (x, y, w, h) => {
         this.myNativeComponent.mapDeviceCoordsToPage(x, y);
      });

1 个答案:

答案 0 :(得分:0)

进行了一些搜索后,我在this article中找到了答案。 UIManager.measureInWindow的回调返回的坐标是布局坐标。为了获得像MotionEvent这样的像素坐标,您需要使用react native的PixelRatio.getPixelSizeForLayoutSize函数。所以我的最终解决方案如下所示:

UIManager.measureInWindow(findNodeHandle(this.view),
  (x, y, w, h) => {
     const pixelX = PixelRatio.getPixelSizeForLayoutSize(x);
     const pixelY = PixelRatio.getPixelSizeForLayoutSize(y);
     this.myNativeComponent.mapDeviceCoordsToPage(pixelX, pixelY);
  });