regeme
regeme

Reputation: 872

android How to make a draggable pin on maps v2

Hi to all I am trying to make a pin .. The issue is I couldn't find related source with my question . I've checked commonsware topics but none of them covers a draggable pin. Actually one of them has but it is related with maps v1 not v2 .. So how can I make a pin that occurs on users current position , and then could be dragged anywhere on the map when they tap on the pin..

Here is a sample code which has a pin (marker) and finds user location ..

public class MainActivity extends AbstractMapActivity implements
OnNavigationListener, OnInfoWindowClickListener,
OnMyLocationChangeListener {
private static final String STATE_NAV="nav";
private static final int[] MAP_TYPE_NAMES= { R.string.normal,
  R.string.hybrid, R.string.satellite, R.string.terrain };
private static final int[] MAP_TYPES= { GoogleMap.MAP_TYPE_NORMAL,
  GoogleMap.MAP_TYPE_HYBRID, GoogleMap.MAP_TYPE_SATELLITE,
  GoogleMap.MAP_TYPE_TERRAIN };
private GoogleMap map=null;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

if (readyToGo()) {
  setContentView(R.layout.activity_main);

  SupportMapFragment mapFrag=
      (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map);

  initListNav();

  map=mapFrag.getMap();

  if (savedInstanceState == null) {
    CameraUpdate center=
        CameraUpdateFactory.newLatLng(new LatLng(40.76793169992044,
                                                 -73.98180484771729));
    CameraUpdate zoom=CameraUpdateFactory.zoomTo(15);

    map.moveCamera(center);
    map.animateCamera(zoom);
  }

  addMarker(map, 40.748963847316034, -73.96807193756104,
            R.string.un, R.string.united_nations);
  addMarker(map, 40.76866299974387, -73.98268461227417,
            R.string.lincoln_center,
            R.string.lincoln_center_snippet);
  addMarker(map, 40.765136435316755, -73.97989511489868,
            R.string.carnegie_hall, R.string.practice_x3);
  addMarker(map, 40.70686417491799, -74.01572942733765,
            R.string.downtown_club, R.string.heisman_trophy);

  map.setInfoWindowAdapter(new PopupAdapter(getLayoutInflater()));
  map.setOnInfoWindowClickListener(this);

  map.setMyLocationEnabled(true);
  map.setOnMyLocationChangeListener(this);
 }
}

@Override
public boolean onNavigationItemSelected(int itemPosition, long itemId) {
map.setMapType(MAP_TYPES[itemPosition]);

return(true);
}

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);

savedInstanceState.putInt(STATE_NAV,
                          getSupportActionBar().getSelectedNavigationIndex());
}

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);

getSupportActionBar().setSelectedNavigationItem(savedInstanceState.getInt(STATE_NAV));
}

@Override
public void onInfoWindowClick(Marker marker) {
Toast.makeText(this, marker.getTitle(), Toast.LENGTH_LONG).show();
}

@Override
public void onMyLocationChange(Location lastKnownLocation) {
Log.d(getClass().getSimpleName(),
      String.format("%f:%f", lastKnownLocation.getLatitude(),
                    lastKnownLocation.getLongitude()));
}

private void initListNav() {
ArrayList<String> items=new ArrayList<String>();
ArrayAdapter<String> nav=null;
ActionBar bar=getSupportActionBar();

for (int type : MAP_TYPE_NAMES) {
  items.add(getString(type));
}

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
  nav=
      new ArrayAdapter<String>(
                               bar.getThemedContext(),
                               android.R.layout.simple_spinner_item,
                               items);
}
else {
  nav=
      new ArrayAdapter<String>(
                               this,
                               android.R.layout.simple_spinner_item,
                               items);
}

nav.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
bar.setListNavigationCallbacks(nav, this);
}

private void addMarker(GoogleMap map, double lat, double lon,
                     int title, int snippet) {
map.addMarker(new MarkerOptions().position(new LatLng(lat, lon))
                                 .title(getString(title))
                                 .snippet(getString(snippet)));
  }
}

Upvotes: 1

Views: 3442

Answers (1)

tyczj
tyczj

Reputation: 73753

all the documentation you need is right here

https://developers.google.com/maps/documentation/android/

all you have to do is set the marker to draggable

marker.setDraggable(true);

Upvotes: 2

Related Questions