How to move a map under a marker? How to move a map under a marker? android android

How to move a map under a marker?


Two easy steps:

Step 1

I used a RelativeLayout as parent of fragment with map and center in it an ImageView (which will do as the centered map marker just like in uber or easy taxi apps):

<!-- Map and ImageView in center for simulating the map marker --><RelativeLayout    android:id="@+id/confirm_address_map_wrapper"    android:layout_width="match_parent"    android:layout_height="220dp">    <fragment        android:id="@+id/confirm_address_map_fragment"        android:name="com.google.android.gms.maps.MapFragment"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:layout_centerInParent="true"        />    <!-- Image View that acts as map marker notice centerInParent-->     <View        android:id="@+id/view"        android:layout_width="1dp"        android:layout_height="1dp"        android:layout_centerInParent="true"/>    <ImageView        android:id="@+id/confirm_address_map_custom_marker"        android:layout_width="@dimen/ICON_DEFAULT_SIZE"        android:layout_height="@dimen/ICON_DEFAULT_SIZE"        android:layout_above="@+id/view"        android:layout_centerHorizontal="true"        android:src="@mipmap/my_map_marker"/></RelativeLayout>

Step 2

onMapReady() method at my activity I use googleMap instance method setOnCameraChangeListener() that lets me listen when the map is used and get latitude and longitude based on the center of camera position:

    @Override    public void onMapReady(GoogleMap googleMap) {        googleMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {        @Override        public void onCameraChange(CameraPosition cameraPosition) {           Log.i("centerLat",cameraPosition.target.latitude);           Log.i("centerLong",cameraPosition.target.longitude);        }    });}

UPDATE:
OnCameraChangeListener is deprecated . Please use OnCameraIdleListener:
[Source: https://stackoverflow.com/a/38732283/421467]


I was not able to get the Uber app effect, however I was able to do something similar, perhaps it will do just fine for your solution making use of the GoogleMap.OnCameraChangeListener.

Activity:

public class MyActivity extends Activity implements OnCameraChangeListener {    ...    @Override    public void onCameraChange(CameraPosition position) {        mMap.clear();        mMap.addMarker( new MarkerOptions()            .position( position.target )            .title( position.toString() )        );    }    ...}

The problem is, the marker is not drawn while the camera is being moved. However, it seems as though you have already created an overlay of a marker. So with an overlay it should work like the Uber application.

I hope this helps, even the question is a few months old, perhaps it will benefit future developers.

Kind regardsMiki


If you are using Fragment to display your google map, put the ImageView inside the Fragment to overlay your customized marker such that your marker remains fixed when you are moving your map. Follow the code for xml file:

<fragment    android:id="@+id/map"    android:layout_width="match_parent"    android:layout_height="match_parent"    class="com.google.android.gms.maps.MapFragment" >    <ImageView        android:id="@+id/pin"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_gravity="center"        android:contentDescription="@null"        android:src="@drawable/pin" /></fragment>

In the activity.java file use this:

ImageView pinButton = (ImageView) findViewById(R.id.pin);

use setOnCameraChangeListener() to get latitude and longitude based on the center of camera position or follow the answer provided by @androidPlusPlus