android - Google maps beam 在 android MapFragment 中显示用户方向/航向

标签 android google-maps location

enter image description here

是否可以在 android google MapFragment 中使用 Shiny 的蓝色光束而不是不显眼的箭头?这项新功能适用于 Android 版 Google map 。如何在应用中实现?

最佳答案

我假设您基本上想用自己的方向指示器替换方向指示器?如果您正在寻找完整的“到目的地的线路”,则有 already answers .

This answer建议从 LocationListener 覆盖开始设置自定义图标(.icon(yourIcon) on MarkerOptions):

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 - Google maps beam 在 android MapFragment 中显示用户方向/航向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41843329/

相关文章:

android - 使用 Google Maps Android API v2 的当前 map 缩放级别的半径大小(以十进制度表示)

android - 获取到一个点的最短距离

android - 使用 ffmpeg 库在 android 中合并 .m4a 文件

android - 获取 Instagram 私有(private) api 的 HmacSHA256 key

android - 我在运行 Android 项目时遇到错误

javascript - Google Maps API - 获取属性(property)边界数据

Android 实现加载屏幕

javascript - c :foreach tag is not working for Google map in javascript jsp

android - 无法解析符号 ReceiveUpdatesIntentService

excel - 用于确定位置之间距离的方法/工具