谷歌地图光束在 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

Android - 通过网页 url 启动谷歌地图

在android中将坐标传递给谷歌地图

如何在android的谷歌地图V2上添加谷歌素材图标“我的位置”?

无法单击标记 - 谷歌地图集群Android,无法在谷歌地图中显示信息窗口

如何在android中根据谷歌地图不同的缩放级别调整谷歌地图标记的大小