NativeScript Angular - 在点击事件中获取X和Y.

时间:2017-07-28 10:25:51

标签: angular nativescript angular2-nativescript

我正在使用Nativescript-Angular-App而且我遇到了问题。

用户必须点击图片上的正确位置。

我不明白如何获得简单点击的坐标。

我可以通过触摸手势(TouchGestureEventData)获得坐标,但它提供了一个信息流。我只想要一个数据。

  • GestureEventData没有GetX()方法。
  • TouchGestureEventData有GetX()方法,但我只想要第一次触摸。

我尝试过触摸:

public onTouch(args: TouchGestureEventData) {
     console.log(args.getActivePointers()[0].getX());
}

但是我获得了太多的数据(每一个动作)。

有没有办法只用简单的点击来获取坐标?

谢谢!

2 个答案:

答案 0 :(得分:4)

如果您只想获得一次触摸活动。您可以做的是检查事件操作是down操作还是up操作。例如,下面的代码将为您提供触摸事件的X和Y坐标,并且每次触摸事件只会发生一次。

public onTouch(e: TouchGestureEventData) {
    if (e && e.action === 'down') {
        this.xCoord = e.getX();
        this.yCoord = e.getY();
    }
}

答案 1 :(得分:1)

研究了此问题,并找到了在iOS中进行点击事件的方法:

onTap(e) {
    const loc = e.ios.locationInView(e.object.ios);
    console.log("(x,y) in dp: " + loc.x + "," + loc.y);
}  

我发现e.ios是该tap事件的本机对象表示形式,并尝试查看我可以用它做什么,因此我使用了Chrome DevTools,并开始输入e.ios.location,并获得了locationInView()自动完成。然后,我在Apple's documentation中进行了搜索,发现该函数将UIView作为参数。所以我尝试了e.ios.locationInView(e.object);并得到了一个例外,所以我记得UIView是nativescript的View类的iOS表示形式,所以我尝试了e.ios.locationInView(e.object.ios);并得到了CGPoint表示视图中的抽头坐标。
请务必注意,loc.xloc.ydp为单位。

对于Android,它要简单得多:

onTap(e) {
    const x = e.android.getX();
    const y = e.android.getY();
    console.log("(x,y) in pixels: " + x + "," + y);
}  

请注意,在这种情况下,坐标以pixel为单位,因此要将其转换为dp,首先必须将import { screen } from "platform";导入到您的位置,并且那么为了获得dp中的x坐标,您需要:  
e.android.getX() / screen.mainScreen.scale