@Override
        public boolean onSingleTapUp(final MotionEvent e) {
            // is map already initialized?
            if (googleMap != null) {
                final Point p = new Point((int) e.getX(), (int) e.getY());

                // check for zoom controls and compass rose
                final int[] mapLocation = new int[2];
                final View vMap = findViewById(R.id.map);
                vMap.getLocationOnScreen(mapLocation);

                if (isHit(p.x + mapLocation[0], p.y + mapLocation[1], findViewWithTag(GOOGLEMAP_ZOOMIN_BUTTON))
                 || isHit(p.x + mapLocation[0], p.y + mapLocation[1], findViewWithTag(GOOGLEMAP_ZOOMOUT_BUTTON))
                 || isHit(p.x + mapLocation[0], p.y + mapLocation[1], findViewWithTag(GOOGLEMAP_COMPASS))
                ) {
                    return false;
                }

                // hit something else
                final LatLng latLng = googleMap.getProjection().fromScreenLocation(p);
                if (latLng != null && onCacheTapListener != null) {
                    final GoogleCacheOverlayItem closest = closest(new Geopoint(latLng.latitude, latLng.longitude));
                    if (closest != null) {
                        final Point waypointPoint = googleMap.getProjection().toScreenLocation(new LatLng(closest.getCoord().getCoords().getLatitude(), closest.getCoord().getCoords().getLongitude()));
                        if (insideCachePointDrawable(p, waypointPoint, closest.getMarker(0).getDrawable())) {
                            onCacheTapListener.onCacheTap(closest.getCoord());
                        }
                    }
                }
            }
            return false;
        }
can be made static if nonstatic inner clases could have static methods
main/src/main/java/cgeo/geocaching/maps/google/v2/GoogleMapView.java