Можно ли использовать сияющий синий луч вместо незаметной стрелки в android google MapFragment? Эта новая функция доступна для Google Maps на Android. как реализовать его в приложении? Пожалуйста, поделитесь своими мыслями, пожалуйста.
Спасибо!
Можно ли использовать сияющий синий луч вместо незаметной стрелки в android google MapFragment? Эта новая функция доступна для Google Maps на Android. как реализовать его в приложении? Пожалуйста, поделитесь своими мыслями, пожалуйста.
Спасибо!
Я предполагаю, что вы по сути хотите заменить указатель поворота своим собственным? Если вы ищете полные "линии до места назначения", там уже есть ответы.
Этот ответ предлагает начать с переопределения LocationListener
для установки пользовательского значка (.icon(yourIcon)
в 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) {
}
}
После этого вы можете добавить .rotation()
после new MarkerOptions()
чтобы установить текущее вращение устройства. Это можно сделать, указав параметр в вашем фрагменте/активности (например, private Int rotation = 0
) и обновив его.
Это обновление будет выполнено путем реализации SensorEventListener
в вашем Fragment/Activity и внутри onSensorChanged(event: SensorEvent)
обновляющего ваш кэш вращения устройства.
Ответ на этот вопрос довольно сложный, чтобы получить вращение (азимут) от акселерометра и магнитного поля, а также несколько альтернатив.
Убедитесь, что вы отменили регистрацию своих слушателей соответствующим образом!