双击:放大Android MapView?

经过一些工作,我的路线应用程序工作正常。 我唯一想要添加的是双击放大function,但我不知道如何。

你能给我一个提示吗?

实现GestureListener以接收doubleTap事件。

请参阅: 网格布局上的手势检测

我一直在寻找答案/示例,但发现无处可用的代码。

最后,这是为我工作的代码:

MyMapActivity.java

public class MyMapActivity extends MapActivity implements OnGestureListener, OnDoubleTapListener { private MapView mapView; @Override public void onCreate(Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); setContentView(R.layout.main); mapView = (MapView)findViewById(R.id.mapView); } @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)); mapView.getController().zoomIn(); return true; } // Here will be some autogenerated methods too 

OnDoubleTap.java

 public class OnDoubleTap extends MapView { private long lastTouchTime = -1; public OnDoubleTap(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { long thisTime = System.currentTimeMillis(); if (thisTime - lastTouchTime < ViewConfiguration.getDoubleTapTimeout()) { // Double tap this.getController().zoomInFixing((int) ev.getX(), (int) ev.getY()); lastTouchTime = -1; } else { // Too slow lastTouchTime = thisTime; } } return super.onInterceptTouchEvent(ev); } } 

main.xml中

     

别忘了在这里用你的apiKey替换android:apiKey值。

这是一个很好的,简单的实现:

双击放大GoogleMaps活动

(所有那些讨论这个问题的人的迟到答案)

我知道一篇旧post,但这个解决方案也有效: 双击/点击地图缩放(Android)

我认为他在自己的post中修正了他的错误,所以只使用问题部分,而不是答案(他们是可怕的:))

如果要放大和缩小,请使用以下代码

  1. 放大双击mapview的前50%
  2. 缩小双击底部50%的mapview
 @Override public boolean onInterceptTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { long thisTime = System.currentTimeMillis(); DisplayMetrics metrics = new DisplayMetrics(); WindowManager wm = (WindowManager) activity.getSystemService(activity.getApplicationContext().WINDOW_SERVICE); wm.getDefaultDisplay().getMetrics(metrics); int height = metrics.heightPixels; if (thisTime - lastTouchTime < ViewConfiguration.getDoubleTapTimeout()) { // Double tap if((height/2)>ev.getY()){ // Zoom IN this.getController().zoomInFixing((int) ev.getX(), (int) ev.getY()); }else{ this.getController().zoomOutFixing((int) ev.getX(), (int) ev.getY()); //Zoom Out } lastTouchTime = -1; } else { // Too slow lastTouchTime = thisTime; } } return super.onInterceptTouchEvent(ev); } 

如果有人正在为新的GoogleMap寻找答案(因为Google-Play-service:9+)

 case MotionEvent.ACTION_DOWN: x1 = m.getX(); if ((System.currentTimeMillis() - systemTime) < 200) { mGoogleMap.animateCamera(CameraUpdateFactory.zoomIn()); } systemTime = System.currentTimeMillis(); break; case MotionEvent.ACTION_UP: systemTime = System.currentTimeMillis(); ... break;