Pages

Monday, June 6, 2011

Display a marker on MapView, using Overlays.

Expends from last exercise, AndroidMapper. A marker is shown on the current location using Overlays, if MapView started with location, Mode 1.



To use Overlays, a class of InterestingLocations have to be created, extends ItemizedOverlay.

It involve modification on AndroidMapView.java

package com.AndroidMapper;

import java.util.ArrayList;
import java.util.List;

import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import android.widget.CheckBox;
import android.widget.TextView;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.OverlayItem;

public class AndroidMapView extends MapActivity {

  private TextView myLongitude, myLatitude;
  private CheckBox mySatellite;
  
  private MapView myMapView;
  private MapController myMapController;
 
  private void SetSatellite()
  {
   myMapView.setSatellite(mySatellite.isChecked());
  };
  
 @Override
 protected void onCreate(Bundle icicle) {
  // TODO Auto-generated method stub
  super.onCreate(icicle);
  setContentView(R.layout.mymapview);
  
  Bundle bundle = this.getIntent().getExtras();
        int Mode = bundle.getInt("Mode");
  
  myMapView = (MapView)findViewById(R.id.mapview);
  myMapController = myMapView.getController();  
  myMapView.setBuiltInZoomControls(true);
  
  myLongitude = (TextView)findViewById(R.id.longitude);
  myLatitude = (TextView)findViewById(R.id.latitude);
  mySatellite = (CheckBox)findViewById(R.id.satellite);
  mySatellite.setOnClickListener(mySatelliteOnClickListener);
  
  SetSatellite();
  
   
  if(Mode == 1)
  {
   int intLatitude = bundle.getInt("Latitude");
   int intLongitude = bundle.getInt("Longitude");
   GeoPoint initGeoPoint = new GeoPoint(intLatitude, intLongitude);
   CenterLocation(initGeoPoint);
  
   Drawable marker=getResources().getDrawable(
     android.R.drawable.ic_menu_myplaces);
   marker.setBounds(0, 0, marker.getIntrinsicWidth(), 
     marker.getIntrinsicHeight());
   myMapView.getOverlays().add(new InterestingLocations(marker, 
     intLatitude, intLongitude));
  }
 }

 @Override
 protected boolean isRouteDisplayed() {
  // TODO Auto-generated method stub
  return false;
 }
 
 private void CenterLocation(GeoPoint centerGeoPoint)
 {
  myMapController.animateTo(centerGeoPoint);

  myLongitude.setText("Longitude: "+
    String.valueOf((float)centerGeoPoint.getLongitudeE6()/1000000)
    );
  myLatitude.setText("Latitude: "+
    String.valueOf((float)centerGeoPoint.getLatitudeE6()/1000000)
    );
 };
 
 private CheckBox.OnClickListener mySatelliteOnClickListener =
    new CheckBox.OnClickListener(){

     public void onClick(View v) {
      // TODO Auto-generated method stub
      SetSatellite();
     }
 };
 
 class InterestingLocations extends ItemizedOverlay<OverlayItem>{
  
  private List<OverlayItem> locations = 
   new ArrayList<OverlayItem>();
  private Drawable marker;

  public InterestingLocations(Drawable defaultMarker, 
    int LatitudeE6, int LongitudeE6) {
   super(defaultMarker);
   // TODO Auto-generated constructor stub
   this.marker=defaultMarker;
   // create locations of interest
   GeoPoint myPlace = new GeoPoint(LatitudeE6,LongitudeE6);
   locations.add(new OverlayItem(myPlace , 
     "My Place", "My Place"));
   populate();
  }

  @Override
  protected OverlayItem createItem(int i) {
   // TODO Auto-generated method stub
   return locations.get(i);
  }

  @Override
  public int size() {
   // TODO Auto-generated method stub
   return locations.size();
  }

  @Override
  public void draw(Canvas canvas, MapView mapView, 
    boolean shadow) {
   // TODO Auto-generated method stub
   super.draw(canvas, mapView, shadow);
   
   boundCenterBottom(marker);
  }
 }
}


Download the files.

No comments:

Post a Comment

Popular Posts