Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android Google Maps Move Camera

I've been implementing Google Maps with Android. I'm using frame layout to view the map, and it works. However, I wanna use the move camera in order to focus the map to a specific location. However, i can't implement it using my code.

MainActivity.java

public class MainActivity extends Activity {

private MainMapFragement mapFragment;
private HashMap<Marker, EventInfo> eventMarkerMap;
EventInfo firstEventInfo;
Marker firstMarker;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.map_activity);
    mapFragment = new MainMapFragement();
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    ft.add(R.id.map, mapFragment);
    ft.commit();

}

@Override
protected void onStart() {
    super.onStart();
    setUpEventSpots();
}



private void setUpEventSpots() {
    // I'm going to make 2 EventInfo objects and place them on the map
    eventMarkerMap = new HashMap<Marker, EventInfo>();
    EventInfo firstEventInfo = new EventInfo(new LatLng(7.190708000000000000, 125.455340999999980000), "Right now - event", new Date(), "Party");

    Marker firstMarker= mapFragment.placeMarker(firstEventInfo);


    eventMarkerMap.put(firstMarker, firstEventInfo);


    mapFragment.getMap().setInfoWindowAdapter(new InfoWindowAdapter() {

        private final View window = getLayoutInflater().inflate(R.layout.custom_window, null);

        @Override
        public View getInfoWindow(Marker marker) {
            EventInfo eventInfo = eventMarkerMap.get(marker);

            String title = marker.getTitle();
            TextView txtTitle = ((TextView) window.findViewById(R.id.txtInfoWindowTitle));
            if (title != null) {
                // Spannable string allows us to edit the formatting of the text.
                SpannableString titleText = new SpannableString(title);
                titleText.setSpan(new ForegroundColorSpan(Color.RED), 0, titleText.length(), 0);
                txtTitle.setText(titleText);
            } else {
                txtTitle.setText("");
            }

            TextView txtType = ((TextView) window.findViewById(R.id.txtInfoWindowEventType));
           if(eventInfo.getType() != null)
                txtType.setText(eventInfo.getType());

            return window;
        }

        @Override
        public View getInfoContents(Marker marker) {
            //this method is not called if getInfoWindow(Marker) does not return null
            return null;
        }
    });

}

}

EventInfo.java

public class EventInfo {

private LatLng latLong;
private String name;
private Date someDate;
private String type;

public EventInfo(LatLng latLong, String name, Date someDate, String type) {
    super();
    this.latLong = latLong;
    this.name = name;
    this.someDate = someDate;
    this.type = type;
}

public LatLng getLatLong() {
    return latLong;
}
public void setLatLong(LatLng latLong) {
    this.latLong = latLong;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public Date getSomeDate() {
    return someDate;
}
public void setSomeDate(Date someDate) {
    this.someDate = someDate;
}

public String getType() {
    return type;
}

public void setType(String type) {
    this.type = type;
}

}

MapFragment.java

public class MainMapFragement extends MapFragment {

public Marker placeMarker(EventInfo eventInfo) {
    Marker m  = getMap().addMarker(new MarkerOptions()
        .position(eventInfo.getLatLong())
        .title(eventInfo.getName()));

    return m;
}
}

Please, how will you implement it with this code.

like image 450
John Anthony de Guzman Avatar asked Jan 24 '15 16:01

John Anthony de Guzman


2 Answers

This should do it:

LatLng latLng = // whatever
float zoom = // whatever
mapfragment.getMap().moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, zoom));
like image 107
nasch Avatar answered Nov 20 '22 17:11

nasch


// in 2021, animate camera will be a better choice :-) 
LatLng latLng = // whatever
float zoom = // whatever
mapfragment.getMap().animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, zoom));
like image 1
Venkataramanan Avatar answered Nov 20 '22 17:11

Venkataramanan