2017-10-21 14 views
0

Google Maps APIを使用してアプリケーションを開発しています。 私は、地図上でユーザが押した場所にマーカーを追加しようとしており、ユーザーが作成したマーカー間に線を引いています。クリック数に無制限のマーカーを追加する方法 - google maps api

私はSetOnMapClickListenerメソッドを追加しようとしましたが、仮想デバイスでアプリケーションを実行するたびにすぐに破棄されます。 また、OnCreateメソッドとOnMapReadyでメソッドの位置を特定しようとしましたが、これも機能しません。 新しいマーカーを追加するのに成功しましたが、書き込むだけです...

Googleマップオブジェクトに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

implementsその後、onCreate()であなたのmMap.setOnMapClickListenerを削除するには、このようなGoogleMap.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

関連する問題