谷歌地图光束在安卓MapFragment中显示用户方向/朝向

20

在这里输入图片描述

在安卓 Google MapFragment 中,是否可以使用一束闪亮的蓝色光束代替不起眼的箭头?这项新功能在安卓版 Google 地图中已经可用。如何在应用程序中实现它?


请问有任何更新吗? - AouledIssa
我已经在官方文档和一些人群讨论中寻找了所有信息,我猜测没有官方途径可以让光束出现在地图上。我认为你应该使用指南针传感器实现自己的解决方案,并使用带有光束的自定义标记持续渲染地图上的航向方向。如果有任何问题,请发表评论或解决方法。先行致谢。 - AouledIssa
1个回答

0

我假设您基本上想要用自己的指示器替换方向指示器?如果您正在寻找完整的“行驶路线”,则已经有答案了。

这个答案建议从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,以及其他几种替代方法。

确保适当地注销您的侦听器!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接