2017-02-22 13 views
0

アンドロイド用Google Maps API v3で長押しのマーカーを実装する方法は?これに関する回答はStack Overflow自体にありますが、Google Maps API v2用です。 @tyczjが指摘したようにGoogle Maps API v3のロングプレスでマーカーを追加

public class advertiserMap extends FragmentActivity implements OnMapReadyCallback { 

private GoogleMap mMap; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_advertiser_map); 
    // 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); 
} 

//for searching for a location 
public void onMapSearch(View view) { 
    EditText locationSearch = (EditText) findViewById(R.id.editText); 
    String location = locationSearch.getText().toString(); 
    List<Address> addressList = null; 

    if (location != null || !location.equals("")) { 
     Geocoder geocoder = new Geocoder(this); 
     try { 
      addressList = geocoder.getFromLocationName(location, 1); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     Address address = addressList.get(0); 
     LatLng latLng = new LatLng(address.getLatitude(), address.getLongitude()); 
     mMap.animateCamera(CameraUpdateFactory.newLatLng(latLng)); 
    } 
} 

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

}

+0

サンプルコードはありますか? –

+0

v3のようなものはありません。アンドロイドはv2です。 https://developers.google.com/maps/documentation/android-api/start アプリでJavascriptのバージョン(v3)を使用したい場合を除き、 – tyczj

+0

@Drew私は投稿を編集したばかりです – jo12345678

答えて

3

は、AndroidのGoogleマップのAPIのためのV3ありませんので、あなたはおそらく、V2を使用しています。

あなたが望むものを実現するには、mMapオブジェクトのsetOnMapLongClickListenerを呼び出して、onMapLongClickの中に必要に応じてマーカーを追加します。その後、一度に存在する唯一つのマーカーを維持したい場合は、グローバルな活動の範囲であなたのマーカーを宣言する必要があり

、および:

@Override 
public void onMapReady(GoogleMap googleMap) { 

    ... 

    mMap.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() { 
     @Override 
     public void onMapLongClick(LatLng latLng) { 
      googleMap.addMarker(new MarkerOptions() 
        .position(latLng) 
        .title("Your marker title") 
        .snippet("Your marker snippet")); 
     } 
    }); 
} 

// EDIT:あなたはonMapReady方法でこれを行う必要があります、onMapLongClickに、マーカーがすでに存在する場合、代わりに新しいマーカーを作成するのではなく、ちょうどそれが位置のアップデート:このように行われている場合

public class advertiserMap extends FragmentActivity implements OnMapReadyCallback { 

    // Declare marker globally 
    Marker myMarker; 

    ... 

    @Override 
    public void onMapReady(GoogleMap googleMap) { 

     ... 

     mMap.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() { 
      @Override 
      public void onMapLongClick(LatLng latLng) { 

       // First check if myMarker is null 
       if (myMarker == null) { 

        // Marker was not set yet. Add marker: 
        myMarker = googleMap.addMarker(new MarkerOptions() 
         .position(latLng) 
         .title("Your marker title") 
         .snippet("Your marker snippet")); 

       } else { 

        // Marker already exists, just update it's position 
        myMarker.setPosition(latLng); 

       } 
      } 
     }); 
    } 
} 

、あなたのマーカーはあなたのコードでそれを操作する前にNULLでない場合は、必ずチェックすることを忘れないでください。

+0

おかげで魅力的でしたが、一度に1つしかマーカーを持たないようにマップを作成するにはどうすればいいですか?たとえば、もし私がどこか長い間押されていて、それが正しい場所ではないと判断した場合、どこか他の場所を長押しすれば、前のマーカーは消える必要があります。私はマーカーのlatlngを取得する必要がありますので、これが必要です。 – jo12345678

+0

私は答えを編集し、このケースを補完しました。見て@ JolanGoburdhun –

+0

おかげで多くの仲間! – jo12345678

関連する問題