Android,允许用户在地图上绘制折线

Android, Allow user to draw polyline on map

我努力让用户在触摸地图时在地图上绘制折线,我不知道哪里出错了,我认为问题出在 onMapTouch 方法上,因为地图显示正常,但当我触摸地图时它说"Unfortunately application has stopped working",你怎么想,这里是logcat:

17319-17319/? E/AndroidRuntime:致命异常:main 进程:com.example.sarahn.myapplication,PID:17319 java.lang.IllegalArgumentException: 标记选项中没有位置 在 com.google.l.a.ce.a(来源不明) 在 com.google.maps.api.android.lib6.d.ft.a(来源不明) 在 com.google.android.gms.maps.internal.l.onTransact(源文件:167) 在 android.os.Binder.transact(Binder.java:380) 在 com.google.android.gms.maps.internal.IGoogleMapDelegate$zza$zza.addMarker(未知来源) 在 com.google.android.gms.maps.GoogleMap.addMarker(来源不明) 在 com.example.sarahn.myapplication.MapsActivity.onMapClick(MapsActivity.java:91) 在 com.google.android.gms.maps.GoogleMap$8.onMapClick(来源不明) 在 com.google.android.gms.maps.internal.zzj$zza.onTransact(来源不明) 在 android.os.Binder.transact(Binder.java:380) 在 com.google.android.gms.maps.internal.ar.a(源文件:93) 在 com.google.maps.api.android.lib6.gmm6.c.ac.b(未知来源) 在 com.google.maps.api.android.lib6.gmm6.n.bt.d(未知来源) 在 com.google.maps.api.android.lib6.gmm6.n.ak.onSingleTapConfirmed(未知来源) 在 com.google.maps.api.android.lib6.gmm6.h.g.onSingleTapConfirmed(未知来源) 在 com.google.maps.api.android.lib6.gmm6.h.i.handleMessage(未知来源) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:211) 在 android.app.ActivityThread.main(ActivityThread.java:5317) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1016) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:811)

public class MapsActivity   extends                                                                     FragmentActivit                                                                  implementsGoogleMap.OnMapClickListener{

private GoogleMap mMap;
ArrayList<LatLng> arrayList;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);
    setUpMapIfNeeded();
    arrayList = new ArrayList<LatLng>();
    SupportMapFragment f =                                               (SupportMapFragmen)                                                                                                                                                                                                                                                                                                         getSupportFragmentManager().findFragmentById(R.id.map);
    mMap= f.getMap();
    mMap.setMyLocationEnabled(true);
    mMap.setOnMapClickListener(this);
    }

    @Override
    protected void onResume() {
    super.onResume();
    setUpMapIfNeeded();
    }

    public void onMapClick(LatLng latLng) {

    MarkerOptions markerOptions = new MarkerOptions();
    markerOptions.position(latLng);
    mMap.addMarker(markerOptions);
    PolylineOptions p = new PolylineOptions();
    p.color(Color.RED);
    p.width(5);
    arrayList.add(latLng);
    p.addAll(arrayList);
    mMap.addPolyline(new PolylineOptions());
    mMap.addMarker(new MarkerOptions());



    }

这可能与以下事实有关:MarkerOptions 的 position 方法 returns 您要设置位置的对象。

尝试:

MarkerOptions markerOptions = new MarkerOptions();
markerOptions = markerOptions.position(latLng);

编辑:

上面我错了。就是因为这行代码:

mMap.addMarker(new MarkerOptions());

您正在地图上添加一个没有位置的新标记。在尝试添加到地图之前,您需要设置标记的位置。我不确定为什么要在地图上添加第二个标记,因为您已经在用户的触摸位置添加了标记。您还试图在地图上添加一条没有属性的多段线。

试试这个,看看会发生什么:

MarkerOptions markerOptions = new MarkerOptions();
markerOptions.position(latLng);
mMap.addMarker(markerOptions);
PolylineOptions p = new PolylineOptions();
p.color(Color.RED);
p.width(5);
arrayList.add(latLng);
p.addAll(arrayList);
mMap.addPolyline(p);