2017-10-21 163 views
0

我正在開發一個應用程序使用谷歌地圖API。 我想添加一個標記,用戶在地圖上按下並在用戶創建的標記之間繪製一條線。如何添加無限標記點擊 - 谷歌地圖api

我嘗試添加方法SetOnMapClickListener,但每次我在虛擬設備中運行我的應用程序時,它都會立即崩潰。 我也嘗試在OnCreate方法和OnMapReady中找到方法,但這也不起作用。 我成功只寫他們增加新的標記,但...

在我發現我看到他們與分配mapFragment.getMap()在谷歌地圖對象一些教程,但是我沒有這個方法。 謝謝!

這裏是我的代碼:

package com.example.user.testmap; 

import android.support.v4.app.FragmentActivity; 
import android.os.Bundle; 

import com.google.android.gms.maps.CameraUpdateFactory; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.OnMapReadyCallback; 
import com.google.android.gms.maps.SupportMapFragment; 
import com.google.android.gms.maps.model.LatLng; 
import com.google.android.gms.maps.model.MarkerOptions; 

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback { 

    private GoogleMap mMap; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_maps); 
     // Obtain the SupportMapFragment and get notified when the map is ready to be used. 
     SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
       .findFragmentById(R.id.map); 
     mapFragment.getMapAsync(this); 

     mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() { 
      @Override 
      public void onMapClick(LatLng latLng) { 
       double lit = latLng.latitude; 
       double lon = latLng.longitude; 
         mMap.addMarker(new MarkerOptions().position(new LatLng(lit, lon))); 

      } 
     }); 
    } 


    @Override 
    public void onMapReady(GoogleMap googleMap) { 
     mMap = googleMap; 

     // Add a marker in Sydney and move the camera 
     LatLng sydney = new LatLng(-34, 151); 
     mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney")); 
     mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)); 
     mMap.addMarker(new MarkerOptions().position(new LatLng(20, 5))); 
     mMap.moveCamera(CameraUpdateFactory.newLatLng(new LatLng(20, 5))); 

    } 

} 
+2

請問您可以顯示您的代碼嗎?當你問你的問題時,你必須付出極大的努力。 –

+0

對不起,我是新來的,我編輯了這篇文章。 –

+0

將logcat錯誤添加到您的帖子。堆棧跟蹤將指向失敗 – Shmuel

回答

0

嘗試刪除您mMap.setOnMapClickListeneronCreate()然後implementsGoogleMap.OnMapClickListener

這樣。

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback, GoogleMap.OnMapClickListener { 

    private GoogleMap mMap; 
    private ArrayList<Marker> arrMarkerList; 
    private ArrayList<Polyline> arrPolylineList; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_maps); 
     // Obtain the SupportMapFragment and get notified when the map is ready to be used. 
     SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
       .findFragmentById(R.id.map); 
     mapFragment.getMapAsync(this); 
    } 

    @Override 
    public void onMapReady(GoogleMap googleMap) { 
     mMap = googleMap; 
     mMap.setOnMapClickListener(this); 
     arrMarkerList = new ArrayList<>(); 
     arrPolylineList = new ArrayList<>(); 
    } 

    @Override 
    public void onMapClick(LatLng latLng) { 
     double lit = latLng.latitude; 
     double lon = latLng.longitude; 
     arrMarkerList.add(mMap.addMarker(new MarkerOptions().position(new LatLng(lit, lon)))); 

     // Removing the existing polyline to draw a new. 
     for (Polyline polyline : arrPolylineList) { 
      polyline.remove(); 
     } 

     if (arrMarkerList.size() > 1) { 
      PolylineOptions polylineOptions = new PolylineOptions(); 
      for (Marker marker : arrMarkerList) { 
       polylineOptions.add(marker.getPosition()); 
      } 
      arrPolylineList.add(mMap.addPolyline(polylineOptions)); 
     } 
    } 
} 
+0

感謝它的工作原理! 如何在這些點之間畫線? –

+0

@ToharPingley我編輯了我的答案。您可以使用「折線」在這些點之間繪製一條線。很高興幫助你。你能否請我的答案標記爲已接受。謝謝。 – Jerrol