package com.example.androidmapsv2;
import java.util.ArrayList;
import java.util.List;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMap.CancelableCallback;
import com.google.android.gms.maps.GoogleMap.OnMapClickListener;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.maps.model.Polyline;
import com.google.android.gms.maps.model.PolylineOptions;
import android.location.Location;
import android.os.Bundle;
import android.app.Activity;
import android.app.FragmentManager;
import android.graphics.Color;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity 
 implements OnMapClickListener{
 private GoogleMap myMap;
 PolylineOptions polylineOptions;
 Polyline polyline;
 List<LatLng> listPoint;
 int currentPt;
 
 TextView info;
 SeekBar zoomBar;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        FragmentManager myFragmentManager = getFragmentManager();
        MapFragment myMapFragment = 
          (MapFragment)myFragmentManager.findFragmentById(R.id.map);
        myMap = myMapFragment.getMap();
        
        myMap.setOnMapClickListener(this);
        
        listPoint = new ArrayList<LatLng>();
        clearPolyline();
        
        zoomBar = (SeekBar)findViewById(R.id.zoombgar);
        Button btnClear = (Button)findViewById(R.id.clear);
        Button btnAnimate = (Button)findViewById(R.id.animate);
        Button btnStop = (Button)findViewById(R.id.stopanimate);
        info = (TextView)findViewById(R.id.info);
        
        btnClear.setOnClickListener(new OnClickListener(){
   @Override
   public void onClick(View arg0) {
    clearPolyline();
   }});
        btnAnimate.setOnClickListener(btnAnimateOnClickListener);
        
        btnStop.setOnClickListener(new OnClickListener(){
   @Override
   public void onClick(View arg0) {
    myMap.stopAnimation();
   }});
        
        myMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
        myMap.getUiSettings().setZoomControlsEnabled(true);
        myMap.getUiSettings().setCompassEnabled(true);
        myMap.getUiSettings().setAllGesturesEnabled(true);
    }
    
    OnClickListener btnAnimateOnClickListener =
      new OnClickListener(){
    @Override
    public void onClick(View v) {
     if(listPoint==null || listPoint.isEmpty()){
      Toast.makeText(getApplicationContext(), 
        "Not enought point!", 
        Toast.LENGTH_LONG).show();
     }else{
      float zoomValue = (float)(zoomBar.getProgress() + 2);
      
      myMap.animateCamera(
        CameraUpdateFactory.zoomTo(zoomValue), 
        5000,
        MyCancelableCallback);      
      
      currentPt = 0-1;
      
      info.setText("Zoom to: " + String.valueOf(zoomValue));
     }
    }
     
    };
    
    private void clearPolyline(){
     if(polyline != null){
      polyline.remove();
     }
     
     polylineOptions = new PolylineOptions();
     polylineOptions.color(Color.RED);
     
     listPoint.clear();
     
     myMap.clear();
    }
 @Override
 public void onMapClick(LatLng point) {
  myMap.addMarker(new MarkerOptions().position(point).title(point.toString()));
  polylineOptions.add(point);
  if(polyline != null){
   polyline.remove();
  }
  
  polyline = myMap.addPolyline(polylineOptions);
  listPoint.add(point);
 }
 
 CancelableCallback MyCancelableCallback =
   new CancelableCallback(){
    @Override
    public void onCancel() {
     info.setText("onCancel()");
    }
    @Override
    public void onFinish() {
     if(++currentPt < listPoint.size()){
      
      //Get the current location
      Location startingLocation = new Location("starting point");
      startingLocation.setLatitude(myMap.getCameraPosition().target.latitude);
      startingLocation.setLongitude(myMap.getCameraPosition().target.longitude);
      
      //Get the target location
      Location endingLocation = new Location("ending point");
      endingLocation.setLatitude(listPoint.get(currentPt).latitude);
      endingLocation.setLongitude(listPoint.get(currentPt).longitude);
      
      //Find the Bearing from current location to next location
      float targetBearing = startingLocation.bearingTo(endingLocation);
      
      LatLng targetLatLng = listPoint.get(currentPt);
      float targetZoom = zoomBar.getProgress();
      
      //Create a new CameraPosition
      CameraPosition cameraPosition =
        new CameraPosition.Builder()
          .target(targetLatLng)
                         .bearing(targetBearing)
                         .zoom(targetZoom)
                         .build();
 
      
      myMap.animateCamera(
        CameraUpdateFactory.newCameraPosition(cameraPosition), 
        5000,
        MyCancelableCallback);
      info.setText("Animate to: " + listPoint.get(currentPt) + "\n" +
        "Bearing: " + targetBearing);
      
      
      
     }else{
      info.setText("onFinish()");
     }
     
    }
  
 };
}
 Download the files.
Download the files. The series:
A simple example using Google Maps Android API v2, step by step.

 
0 comments:
Post a Comment