2017-10-21 124 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