user756212
user756212

Reputation: 522

Mapview onTap not firing for OverlayItem onTap

I have a mapview in my app, and everything is working fabulously with touchEvents.

However to maximize usership of the App, I have been trying to add trackBall interface functionality as well and am running into a problem.

The trackball properly scrolls the mapView around when it is in focus, however I am unable to get the onTap event to fire when the user has centered on an overlay item.

When I click the mouse button (I am using the emulator) to simulate a click by the trackball user (F6 engaged trackball) nothing happens.. The onTrackBallEvent code never gets fired in this situation, which I would expect given the API docs say that the onTap should be fired in this instance, but it doesn't get fired either.

If I am not centered on an overlayItem I do get the ACTION_DOWN and ACTION_UP events in the onTrackBallEvent, it is only when the map is centered on an OverlayItem that the onTrackBallEvent does not get fired. Unfortunately the onTap Events don't get fired either. Obviously the OS is doing something with these clicks when an overlay is under the center of the screen and a user clicks on the trackball, but I will be darned if I can figure out what it is.

Does anyone know what Event I should be looking for?

Upvotes: 0

Views: 1541

Answers (3)

Digo
Digo

Reputation: 11

This is quite an old issue but figured I'd give my 2 cents. For some reason, you need to add an overlay somewhere on the map before the onTap() override can add other overlays where you click. I used:

public boolean onTap(GeoPoint p, MapView mapView) {
    boolean tappedAnOverlay = super.onTap(p, mapView);
    if (tappedAnOverlay) {
        // do your thing if hit an overlay
    }
    else {
        // no overlay found in that location
    }

    MapController mc = mapView.getController();
    mc.animateTo(p);

    return true;

} 

Upvotes: 1

Basil
Basil

Reputation: 2173

please try this one. This is used for showing multiple overlays on map view, may be it will solve the problem: https://github.com/donnfelker/android-mapviewballoons

Upvotes: 0

Dayerman
Dayerman

Reputation: 4003

For it works with this. I check if the hit point on the screen matches with some overlay item.

        public boolean onTouchEvent(MotionEvent event, MapView mv) {
        final int action=event.getAction();
        final int x=(int)event.getX();
        final int y=(int)event.getY();

        if(!this.marker.equals(getResources().getDrawable(R.drawable.parada))){
            if (action == MotionEvent.ACTION_DOWN) {
                        for (OverlayItem item : mItems) {
                        Point p = new Point(0,0);                       
                        mv.getProjection().toPixels(item.getPoint(), p);                        
                        if (hitTest(item, marker, x-p.x, y-p.y) && item.getSnippet()!= "parada") {

Upvotes: 0

Related Questions