谷歌地图光束在 android MapFragment 中显示用户方向/标题
Posted
技术标签:
【中文标题】谷歌地图光束在 android MapFragment 中显示用户方向/标题【英文标题】:Google maps beam to show user directions/heading in android MapFragment 【发布时间】:2017-06-10 03:29:46 【问题描述】:是否可以在 android google MapFragment
中使用闪亮的蓝色光束代替不起眼的箭头?此新功能适用于 Android 版 Google 地图。如何在应用中实现?
【问题讨论】:
有什么更新吗? 我到处查看官方文档以及一些人群讨论,我想没有官方方法可以让光束出现在地图上。我假设您应该使用指南针传感器实现自己的解决方案,并使用带有光束的自定义标记在地图上连续呈现航向方向。请评论或发布解决方案(如果有)。提前致谢。 【参考方案1】:我假设您基本上想用自己的方向指示器替换方向指示器?如果您正在寻找完整的“到达目的地的线路”,这里有 already answers。
This answer 建议从 LocationListener
覆盖开始设置自定义图标(MarkerOptions
上的.icon(yourIcon)
):
public class MyLocationLayer implements LocationListener
private GoogleMap map;
private BitmapDescriptor markerDescriptor;
private boolean drawAccuracy = true;
private int accuracyStrokeColor = Color.argb(255, 130, 182, 228);
private int accuracyFillColor = Color.argb(100, 130, 182, 228);
private Marker positionMarker;
private Circle accuracyCircle;
public MyLocationLayer(GoogleMap map, int markerResource)
this.map = map;
markerDescriptor = BitmapDescriptorFactory.fromResource(markerResource);
public void setDrawAccuracy(boolean drawAccuracy)
this.drawAccuracy = drawAccuracy;
public void setAccuracyStrokeColor(int color)
this.accuracyStrokeColor = color;
public void setAccuracyFillColor(int color)
this.accuracyFillColor = color;
@Override
public void onLocationChanged(Location location)
double latitude = location.getLatitude();
double longitude = location.getLongitude();
float accuracy = location.getAccuracy();
if (positionMarker != null)
positionMarker.remove();
final MarkerOptions positionMarkerOptions = new MarkerOptions()
.position(new LatLng(latitude, longitude))
.icon(markerDescriptor)
.anchor(0.5f, 0.5f);
positionMarker = map.addMarker(positionMarkerOptions);
if (accuracyCircle != null)
accuracyCircle.remove();
if (drawAccuracy)
final CircleOptions accuracyCircleOptions = new CircleOptions()
.center(new LatLng(latitude, longitude))
.radius(accuracy)
.fillColor(accuracyFillColor)
.strokeColor(accuracyStrokeColor)
.strokeWidth(2.0f);
accuracyCircle = map.addCircle(accuracyCircleOptions);
@Override
public void onStatusChanged(String provider, int status, Bundle extras)
@Override
public void onProviderEnabled(String provider)
@Override
public void onProviderDisabled(String provider)
然后,您可以在new MarkerOptions()
之后添加.rotation()
以设置设备的当前旋转。这可以通过在 Fragment / Activity 上设置一个参数(例如private Int rotation = 0
)并更新它来完成。
此更新将通过在您的 Fragment / Activity 中实现 SensorEventListener
并在 onSensorChanged(event: SensorEvent)
内部更新设备旋转的缓存来完成。
从加速度计和磁场获取旋转(方位角)的一种相当复杂的方法是on this answer,以及一些替代方法。
确保您在适当的时候取消注册您的听众!
【讨论】:
以上是关于谷歌地图光束在 android MapFragment 中显示用户方向/标题的主要内容,如果未能解决你的问题,请参考以下文章
如何在android的谷歌地图V2上添加谷歌素材图标“我的位置”?