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

时间:2015-08-04 00:40:21

标签: android google-maps maps polyline

我努力让用户在地图上触摸时在地图上绘制折线,我知道我哪里出错,我认为问题在于onMapTouch方法,因为地图显示正常,但当我触摸地图时说“不幸”应用程序已停止工作“,您的想法,这是logcat:

17319-17319 /? E / AndroidRuntime:致命异常:主要     过程: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(SourceFile: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(SourceFile: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)             at java.lang.reflect.Method.invoke(Native Method)             在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());



    }

1 个答案:

答案 0 :(得分:0)

这可能与MarkerOptions的position方法返回您正在设置位置的对象这一事实有关。

尝试:

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);