prashantrs
Lurker
I all. I'm working on an android Google map application. The application use Mapview to show Google map. The main activity displays Google map and an overlay at startup. On a long press event i call another form which i'm using as context menu since i'm unable to get context menu on Google maps. This form again calls another form on click of button. Please find the code i'm using below. The code crashes at StartActivity() function while calling Item activity which shows the menu in onTouchEvent. Please help.
public class MapsActivity extends MapActivity
{
MapView mapView;
MapController mc;
GeoPoint p;
public Intent myIntent;
class MapOverlay extends com.google.android.maps.Overlay
{
long startTime;
long endTime;
float startX, startY, endX, endY;
@Override
public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when)
{
super.draw(canvas, mapView, shadow);
//---translate the GeoPoint to screen pixels---
Point screenPts = new Point();
mapView.getProjection().toPixels(p, screenPts);
//---add the marker---
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.pushpin);
canvas.drawBitmap(bmp, screenPts.x, screenPts.y-35, null);
return true;
}
@Override
public boolean onTouchEvent(MotionEvent event, MapView mapView)
{
if(event.getAction() == MotionEvent.ACTION_DOWN)
{
//record the start time
startTime = event.getEventTime();
startX = event.getX();
startY = event.getY();
}
else if(event.getAction() == MotionEvent.ACTION_UP)
{
//record the end time
endTime = event.getEventTime();
endX = event.getX();
endY = event.getY();
}
//verify
if(((endTime - startTime) > 1000) && (startX == endX) && (startY == endY))
{
try
{
//Toast.makeText(getBaseContext(), "Opening menu!!!", Toast.LENGTH_SHORT).show();
myIntent = new Intent(mapView.getContext(), Item.class);
startActivity(myIntent);
//Intent myIntent = new Intent("net.learn2develop.GoogleMaps.Item");
//myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//myIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
//startActivity(myIntent);
//Context context = net.learn2develop.GoogleMaps.getBaseContext();
//context.startActivity(new Intent(context, Item.class));
}
catch(Exception e)
{
Log.d("Events", e.getMessage());
}
return true; //notify that you handled this event (do not propagate)
}
else
return false;
}
}
public boolean onKeyDown(int keyCode, KeyEvent event)
{
MapController mc = mapView.getController();
switch (keyCode)
{
case KeyEvent.KEYCODE_3:
mc.zoomIn();
break;
case KeyEvent.KEYCODE_1:
mc.zoomOut();
break;
}
return super.onKeyDown(keyCode, event);
}
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mapView = (MapView) findViewById(R.id.mapview);
mapView.displayZoomControls(true);
mc = mapView.getController();
String coordinates[] = {"12.966667", "77.566667"};
double lat = Double.parseDouble(coordinates[0]);
double lng = Double.parseDouble(coordinates[1]);
p = new GeoPoint(
(int) (lat * 1E6),
(int) (lng * 1E6));
mc.animateTo(p);
mc.setZoom(17);
//---Add a location marker---
MapOverlay mapOverlay = new MapOverlay();
List<Overlay> listOfOverlays = mapView.getOverlays();
listOfOverlays.clear();
listOfOverlays.add(mapOverlay);
mapView.invalidate();
}
@Override
protected boolean isRouteDisplayed()
{
// TODO Auto-generated method stub
return false;
}
}
public class MapsActivity extends MapActivity
{
MapView mapView;
MapController mc;
GeoPoint p;
public Intent myIntent;
class MapOverlay extends com.google.android.maps.Overlay
{
long startTime;
long endTime;
float startX, startY, endX, endY;
@Override
public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when)
{
super.draw(canvas, mapView, shadow);
//---translate the GeoPoint to screen pixels---
Point screenPts = new Point();
mapView.getProjection().toPixels(p, screenPts);
//---add the marker---
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.pushpin);
canvas.drawBitmap(bmp, screenPts.x, screenPts.y-35, null);
return true;
}
@Override
public boolean onTouchEvent(MotionEvent event, MapView mapView)
{
if(event.getAction() == MotionEvent.ACTION_DOWN)
{
//record the start time
startTime = event.getEventTime();
startX = event.getX();
startY = event.getY();
}
else if(event.getAction() == MotionEvent.ACTION_UP)
{
//record the end time
endTime = event.getEventTime();
endX = event.getX();
endY = event.getY();
}
//verify
if(((endTime - startTime) > 1000) && (startX == endX) && (startY == endY))
{
try
{
//Toast.makeText(getBaseContext(), "Opening menu!!!", Toast.LENGTH_SHORT).show();
myIntent = new Intent(mapView.getContext(), Item.class);
startActivity(myIntent);
//Intent myIntent = new Intent("net.learn2develop.GoogleMaps.Item");
//myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//myIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
//startActivity(myIntent);
//Context context = net.learn2develop.GoogleMaps.getBaseContext();
//context.startActivity(new Intent(context, Item.class));
}
catch(Exception e)
{
Log.d("Events", e.getMessage());
}
return true; //notify that you handled this event (do not propagate)
}
else
return false;
}
}
public boolean onKeyDown(int keyCode, KeyEvent event)
{
MapController mc = mapView.getController();
switch (keyCode)
{
case KeyEvent.KEYCODE_3:
mc.zoomIn();
break;
case KeyEvent.KEYCODE_1:
mc.zoomOut();
break;
}
return super.onKeyDown(keyCode, event);
}
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mapView = (MapView) findViewById(R.id.mapview);
mapView.displayZoomControls(true);
mc = mapView.getController();
String coordinates[] = {"12.966667", "77.566667"};
double lat = Double.parseDouble(coordinates[0]);
double lng = Double.parseDouble(coordinates[1]);
p = new GeoPoint(
(int) (lat * 1E6),
(int) (lng * 1E6));
mc.animateTo(p);
mc.setZoom(17);
//---Add a location marker---
MapOverlay mapOverlay = new MapOverlay();
List<Overlay> listOfOverlays = mapView.getOverlays();
listOfOverlays.clear();
listOfOverlays.add(mapOverlay);
mapView.invalidate();
}
@Override
protected boolean isRouteDisplayed()
{
// TODO Auto-generated method stub
return false;
}
}
