2017-02-22 69 views
0

如何在Google地圖API v3中針對android長按添加標記?在Stack Overflow本身有答案,但它們是針對Google Maps API v2的。在Google地圖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這樣的東西,android是v2。 https://developers.google.com/maps/documentation/android-api/start 除非你的意思是你想在你的應用中使用Javascript版本(v3) – tyczj

+0

@Drew我剛剛編輯帖子 – jo12345678

回答

3

由於@tyczj指出,有一個爲Android的谷歌地圖API V3沒有,所以你可能正在使用V2。

這就是說,要完成你想要的,請在你的mMap對象中調用setOnMapLongClickListener,然後在MapLongClick中根據需要添加標記。你應該在onMapReady方法做到這一點:

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

//編輯:

如果你想保持目前在同一時間只有一個標誌,你應該宣佈在全球經濟活動的範圍的標記,然後在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

感謝隊友,它像一個魅力,但我怎樣才能使地圖一次只有一個標記?例如,如果我已經長時間按在某個地方,並認定它不是正確的位置,並且我長時間按其他位置,則以前的標記需要消失。這需要是這種情況,因爲我將不得不檢索標記的latlng。 – jo12345678

+0

我編輯了答案,補充了這種情況。看看@JolanGoburdhun –

+0

非常感謝! – jo12345678

相關問題