Not very.
How hard is it to get the information on how to do it?
Very.
Here's what you probably didn't know:
You need to extend the MapView and use this extended class in the Android XML layout file.
In the extended class you instantiate the gesture detector and set on double tap listener.
In the Map Activity you implement OnGestureListener and OnDoubleTapListener.
Example:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center_horizontal" > <net.kafol.vlaki.ExtMapView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/mapview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" android:enabled="true" android:apiKey="" /> </RelativeLayout>
package net.kafol.vlaki; import android.content.Context; import android.util.AttributeSet; import android.view.GestureDetector; import android.view.GestureDetector.OnDoubleTapListener; import android.view.MotionEvent; import android.view.GestureDetector.OnGestureListener; import com.google.android.maps.MapView; public class ExtMapView extends MapView { private Context context; private GestureDetector gestureDetector; public ExtMapView(Context c, AttributeSet attrs) { super(c, attrs); context = c; gestureDetector = new GestureDetector((OnGestureListener) context); gestureDetector.setOnDoubleTapListener((OnDoubleTapListener) context); } public boolean onTouchEvent(MotionEvent ev) { if (this.gestureDetector.onTouchEvent(ev)) return true; else return super.onTouchEvent(ev); } }
public class Map extends MapActivity implements OnGestureListener, OnDoubleTapListener { ... @Override public boolean onDoubleTap(MotionEvent e) { int x = (int)e.getX(), y = (int)e.getY();; Projection p = mapView.getProjection(); mapView.getController().animateTo(p.fromPixels(x, y)); // zoom in to a point you tapped mapView.getController().zoomIn(); return true; }
5 comments:
good job bro..
Nice code, but there is a MUCH cleaner way to do it by overriding onInterceptTouchEvent in your MapView. See here: http://pedroassuncao.com/2009/01/double-clicktap-detection-on-androids-mapview/
Carl Partridge: your solution has problem with zoom buttons in mapView! When you quickly zoom with buttons, it do bad moves.
Thank you very much. This is the only example, where everything is described from a to z. If not this, I guess I'd stuck on this way too long. Greetings from Armenia.
Thanks you! This is very helpful.
Post a Comment