Не удается удалить полилинию на карте Google (Android)

Я создаю приложение для отслеживания моего шага. Я использую Google MAP API (V2). Я нарисовал свой шаг во время ходьбы (в реальном времени), это мой код.

    case R.id.btn_location:
            if(polyline != null) {
                polyline.remove();
            }
            if(mStatus == IDLE) {
                map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map))
                        .getMap();
                getmyLocation.getmyLocation();
                map.clear();
            }
             break;
case R.id.btn_can_location:

            if (mStatus == RUNNING) {
                mTimer.removeMessages(0);
                mPauseTime = SystemClock.elapsedRealtime();
                mStatus = IDLE;
                loc_manager.removeUpdates(listener);
             break;

//----------------------------------------------------------------------------------------------/

public class getMyLocation {
  private void getmyLocation() {
        if (loc_manager == null)
            loc_manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

        long time = 3000; 

        float minDistance = 10;

        loc_manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, time, minDistance, listener);
        }
    }


private void getmyLocation() {
        if (loc_manager == null)
            loc_manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

        long time = 3000; 

        float minDistance = 10;

        loc_manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, time, minDistance, listener);

static class MyLocationManager implements LocationListener {
    public void onLocationChanged(Location location) {
     polyline = map.addPolyline(polylineOptions.add(new LatLng(location.getLatitude(), location.getLongitude())));
        polylineOptions.width(5);
        polylineOptions.color(Color.RED);

        map.addPolyline(polylineOptions);
}

Отрисовка маршрута в реальном времени — это хорошо. Но удаление полилинии не работает. Помоги мне


person user5819962    schedule 22.03.2016    source источник
comment
Вы можете использовать 'googlemap.clear();' очистить карту гугл   -  person Ravindra Kushwaha    schedule 22.03.2016
comment
есть ли какие-либо исключения или ошибки, отображаемые в logcat при попытке удалить полилинию?   -  person Silvans Solanki    schedule 22.03.2016
comment
Да. Логкат понятен. Ошибка или исключение не происходит.   -  person user5819962    schedule 22.03.2016


Ответы (1)


Я думаю, что ваша проблема в этой области.

case R.id.btn_location:
            if(polyline != null) {
                polyline.remove();
            }
            if(mStatus == IDLE) {
                map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map))
                        .getMap();
                getmyLocation.getmyLocation();
                map.clear();
            }
             break;

попробуй инициализировать карту вот так

SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);

также вам нужно реализовать OnMapReadyCallback и делать все, что вы хотите, внутри карты, готовой, как это

@Override
public void onMapReady(GoogleMap googleMap) {

    Double lat = Double.parseDouble(latt); // latt is string
    Double lang = Double.parseDouble(lngg); // langg is string
    LatLng location = new LatLng(lat, lang);
    CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(location, 16);
    googleMap.addMarker(new MarkerOptions().position(location).title(""));
    googleMap.moveCamera(CameraUpdateFactory.newLatLng(location));
    googleMap.animateCamera(cameraUpdate);
}

и в xml файле добавьте эту строку.

<fragment
   android:id="@+id/map"
   android:name="com.google.android.gms.maps.SupportMapFragment"
   android:layout_width="match_parent"
   android:layout_height="@dimen/hundred_thirty_dp"/>

1 не получать объект карты каждый раз, когда вы нажимаете кнопку. просто инициализируйте его один раз в начале

2 когда вы звоните polyline.remove вам также нужно звонить map.clear();

person Mustanser Iqbal    schedule 22.03.2016
comment
о, спасибо за ваш ответ. Я инициализирую карту в onCreate, и карта статична. map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap(); map.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, ноль); Это проблема...? - person user5819962; 22.03.2016
comment
Я ценю ваш ответ. Я пытаюсь изменить свой код. Спасибо - person user5819962; 22.03.2016
comment
К сожалению, это не работа. Я понимаю, что ломаная линия удалена! При нажатии кнопки полилиния и маркер удаляются. Однако обратный вызов onLocationChanged перерисовывает полилинию. (перед рисованием..) Таким образом, полилиния запуталась, какая из них первая. Я думаю, что LatLng инициализируется на buttonDown. но как я могу сделать? - person user5819962; 22.03.2016
comment
теперь это другая проблема, пожалуйста, объясните в вопросе, что вы хотите. и плохо обновить ответ. - person Mustanser Iqbal; 22.03.2016
comment
А.. Когда закончите отслеживание шага, отобразятся полилинии. Я хочу удалить строку. Поэтому я использую метод polyline.remove() для onClick. И это работа. Но, шаг ReTracking, полилиния дренажа включается перед точкой отслеживания. Так что похоже, что удаление полилинии не работает. - person user5819962; 22.03.2016
comment
я не понимаю, пожалуйста, обновите свой вопрос с кодом. что вы пытаетесь сделать, спасибо. - person Mustanser Iqbal; 22.03.2016