Code example for PolylineOptions

Methods: color, width

0
package com.papagiannis.tuberun; 
 
import java.util.ArrayList; 
 
import android.app.Dialog; 
import android.app.ProgressDialog; 
import android.content.DialogInterface; 
import android.content.res.Resources; 
import android.graphics.Color; 
import android.location.Location; 
import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.util.Log; 
import android.util.TypedValue; 
 
import com.google.android.gms.maps.CameraUpdateFactory; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.SupportMapFragment; 
import com.google.android.gms.maps.model.BitmapDescriptorFactory; 
import com.google.android.gms.maps.model.LatLng; 
import com.google.android.gms.maps.model.LatLngBounds; 
import com.google.android.gms.maps.model.MarkerOptions; 
import com.google.android.gms.maps.model.PolylineOptions; 
import com.google.android.maps.GeoPoint; 
import com.papagiannis.tuberun.cyclehire.CycleHireStation; 
import com.papagiannis.tuberun.fetchers.Observer; 
import com.papagiannis.tuberun.fetchers.RouteFetcher; 
import com.papagiannis.tuberun.fragments.MeMapFragment; 
import com.papagiannis.tuberun.overlays.RailMarkerClickListener; 
import com.papagiannis.tuberun.overlays.TubeMarkerClickListener; 
 
public class DirectionsMapActivity extends FragmentActivity implements Observer {
	protected GoogleMap gMap;
	protected MeMapFragment mapFragment;
	RouteFetcher fetcher;
	final DirectionsMapActivity self=this;
 
	/** Called when the activity is first created. */ 
	@SuppressWarnings("deprecation") 
	@Override 
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.full_screen_map_fragment); 
		gMap = ((SupportMapFragment) getSupportFragmentManager()
				.findFragmentById(R.id.map)).getMap();
		mapFragment = (MeMapFragment) getSupportFragmentManager()
				.findFragmentById(R.id.map_fragment); 
 
		try { 
			Bundle extras = getIntent().getExtras();
			Locatable st = (Locatable) extras.get("station");
 
			String type = (String) extras.get("type");
			Boolean isCycleHire = type != null && type.equals("cyclehire");
			Boolean isOysterShop = type != null && type.equals("oystershop");
			Boolean isRailStation = type != null && type.equals("rail");
			Boolean isTubeStation = type != null && type.equals("tube");
 
			int longtitude = (Integer) extras.get("user_longtitude");
			int latitude = (Integer) extras.get("user_latitude");
			GeoPoint me = new GeoPoint(latitude, longtitude);
			GeoPoint to = new GeoPoint(st.getLatitudeE6(), st.getLongtitudeE6());
			Location l = new Location("");
			l.setLongitude(longtitude / (double) 1000000);
			l.setLatitude(latitude / (double) 1000000);
 
			LatLng sw=new LatLng(l.getLatitude(), l.getLongitude());
			LatLng ne=new LatLng(st.getLatitudeE6()/(double)1000000, st.getLongtitudeE6()/(double)1000000);
			 
			setTitle("Route to " + st.getName() + " ("
					+ (int) l.distanceTo(st.getLocation()) + "m)");
 
			int drawable;
			if (isCycleHire)
				drawable = R.drawable.cycle_hire_pushpin;
			else if (isOysterShop) 
				drawable = R.drawable.ic_oyster_selected;
			else if (isRailStation) 
				drawable = R.drawable.rail;
			else { 
				isTubeStation=true;
				drawable = R.drawable.tube;
			} 
			 
			MarkerOptions opt = new MarkerOptions();
			opt.position(ne);
			opt.icon(BitmapDescriptorFactory.fromResource(drawable));
			opt.title(st.getName());
			if (isTubeStation || isRailStation) {
				Station tst=(Station) st;
				opt.snippet(tst.getCode());
				if (isTubeStation) {
					gMap.setOnMarkerClickListener(new TubeMarkerClickListener(this));
				} 
				else if (isRailStation) {
					gMap.setOnMarkerClickListener(new RailMarkerClickListener(this));
				} 
			} 
			else if (isCycleHire) {
				CycleHireStation cst=(CycleHireStation) st;
				opt.snippet("Available Bikes: " + cst.getnAvailableBikes()
								+ "\n" + "Available Docks: " 
								+ cst.getnEmptyDocks());
			} 
			gMap.addMarker(opt);
			 
			double minLat=Math.min(sw.latitude, ne.latitude);
			double minLong=Math.min(sw.longitude, ne.longitude);
			double maxLat=Math.max(sw.latitude, ne.latitude);
			double maxLong=Math.max(sw.longitude, ne.longitude);
			sw=new LatLng(minLat, minLong);
			ne=new LatLng(maxLat, maxLong);
			final LatLngBounds bounds=new LatLngBounds(sw, ne);
			mapFragment.getView().post(new Runnable() {
				@Override 
				public void run() { 
					Resources r = getResources();
					float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, r.getDisplayMetrics());
					gMap.animateCamera(CameraUpdateFactory.newLatLngBounds(bounds, (int) px));
				} 
			}); 
			 
			fetcher = new RouteFetcher(me, to);
			fetcher.registerCallback(this);
			fetcher.update();
			showDialog(0); 
		} catch (Exception e) {
			Log.w("Directions",e);
		} 
	} 
 
	private Dialog wait_dialog;
 
	@Override 
	protected Dialog onCreateDialog(int id) {
		wait_dialog = ProgressDialog.show(this, "Fetching walking directions",
				"Please wait...", true); 
		wait_dialog.setCancelable(true);
		wait_dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
			 
			@Override 
			public void onCancel(DialogInterface dialog) {
				if (fetcher!=null) fetcher.abort();
				self.finish();
			} 
		}); 
		return wait_dialog;
	} 
 
	@Override 
	public void update() { 
		if (wait_dialog!=null) wait_dialog.dismiss();
		PolylineOptions line=new PolylineOptions();
		line.width(9);
		line.color(Color.BLUE);
		ArrayList<GeoPoint> points = fetcher.getPoints();
		for (int i = 0; i < points.size(); i++) {
			GeoPoint gp=points.get(i);
			line.add(new LatLng (gp.getLatitudeE6()/(double)1000000, gp.getLongitudeE6()/(double)1000000));
		}