Breaking News
Loading...
Monday 4 February 2013

Google Maps V2 Animation with bearing

09:48
With the help of "android.location.Location.bearingTo(Location dest)", modify the last exercise "GoogleMap animation with zoom" to include bearing in Maps animation.


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 filesDownload the files.

The series:
A simple example using Google Maps Android API v2, step by step.

0 comments:

Post a Comment

 
Toggle Footer