【问题标题】:Rotating an ImageView to face a given position in latitude and longitude旋转 ImageView 以面对纬度和经度中的给定位置
【发布时间】:2016-11-16 18:27:08
【问题描述】:

我正在尝试对我的应用程序进行编程,以便我的箭头 ImageView 将指向给定的 android.Location。现在它没有指向正确的方向。由于某种原因,这很不正常。我认为这是因为我没有考虑到我正确面对的方向。

这是我目前正在做的事情:

float angle = GetAngle(myLocation);
RotateAnimation anim = new RotateAnimation(0.0f, angle, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
anim.setInterpolator(new LinearInterpolator());
anim.setRepeatCount(0);
anim.setDuration(2);
anim.setFillAfter(true);
arrow.startAnimation(anim);

这里是 GetAngle() 函数:

float GetAngle(Location myLocation)
{
    float angle = (float) Math.toDegrees(Math.atan2(theirLocation.getLatitude() - myLocation.getLatitude(), theirLocation.getLongitude() - myLocation.getLongitude()));
    if (angle < 0)
        angle += 360;
    return angle;
}

有没有比我更好的方法来做到这一点?我不知道如何让 ImageView 面向我从某个位置获得的坐标。

【问题讨论】:

标签: java android geolocation location


【解决方案1】:

首先,我不确定为什么要让图像视图旋转到某个角度。但是,如果您认为可以用标记替换 imageview,那么就这样做。

在这种情况下使用标记有很多好处

  1. 易于获取和设置旋转

  2. 你的旋转会很流畅

其次,使用这个函数来获取角度

toAngle = startingLocation.bearingTo(endingLocation);

【讨论】:

  • 标记不只是显示一个精确的位置吗?我想要一个箭头指向某个方向。
  • 将标记的图标设置为您想要的任何图像。在这种情况下,您的“箭头”。 Marker 在方向和旋转方面比任何视图都有很多优势
  • 我需要使用谷歌地图吗?因为我不是。我只是从 android.Location 获取纬度和经度。
  • 明白了。您是否尝试过我在回答中提到的 BearingTo 函数?
  • 嗯,它肯定给了我一个角度。很难判断它是否正确,因为我只有一个可以测试的设备。我必须使用预设坐标进行测试,看看它是否根据新的角度计算指向正确的方向。
【解决方案2】:

首先在没有动画的情况下更新您的代码。我有同样的问题,所以动画可能会在不同的行为上重新启动或停止。

float angle = GetAngle(myLocation);
myView.setRotation(angle);
//Or also check 
myView.setRotationX(angle);
myView.setRotationY(angle);

【讨论】:

  • 这不是解决办法,但我很欣赏 setRotation() 函数而不是使用动画,所以谢谢。
  • @saboehnke 我的自定义列表视图遇到了同样的问题 - github 中的 LinkedListView。我想为每个滚动的视图设置动画并开始动画,但这是我的问题。所以我通过任何操作来解决问题。
猜你喜欢
  • 1970-01-01
  • 2018-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多