我正在使用一个本机函数,该函数可以使用从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);
});
答案 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);
});