2011-08-26 34 views
1
In my application i want to implement double tap event on map view.For this I'm using following code but doesn't seem to work.Please help me... 
Thanks in advance!! 
public class NooYawk extends MapActivity implements OnGestureListener, OnDoubleTapListener { 
    private MapView map=null; 
    private MyLocationOverlay me=null; 
    GeoPoint geoPoint; 
    MapController controller; 
    OverlayItem overlayItem; 
    PushPinMapView pushPinMapView; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     map=(MapView)findViewById(R.id.map); 

     // map.getController().setCenter(getPoint(40.76793169992044,-73.98180484771729)); 
     controller=map.getController(); 
     map.setStreetView(true); 
     map.setBuiltInZoomControls(true); 

     Drawable marker=getResources().getDrawable(R.drawable.blue); 
     marker.setBounds(0, 0, marker.getIntrinsicWidth(), 
       marker.getIntrinsicHeight()); 

     geoPoint=new GeoPoint((int)(19.182 *1E6),(int)(72.961 * 1E6)); 
     controller.animateTo(geoPoint); 
     overlayItem=new OverlayItem(geoPoint, "Current loc",""); 
     List<Overlay> listOverlays= map.getOverlays(); 
     SitesOverlay sitesOverlay=new SitesOverlay(marker); 
     sitesOverlay.addOverlay(overlayItem); 
     listOverlays.add(sitesOverlay); 
     controller.setZoom(6); 

    } 
@Override 
    protected boolean isRouteDisplayed() { 
     // TODO Auto-generated method stub 
     return false; 
    } 


    private class SitesOverlay extends ItemizedOverlay<OverlayItem> { 
     private List<OverlayItem> items=new ArrayList<OverlayItem>(); 

     public SitesOverlay(Drawable marker) { 
      super(marker); 


     } 

     @Override 
     protected OverlayItem createItem(int i) { 
      return(items.get(i)); 
     } 

     @Override 
     public void draw(Canvas canvas, MapView mapView, 
       boolean shadow) { 
      super.draw(canvas, mapView, shadow); 

      boundCenterBottom(marker); 
     } 

     @Override 
     public int size() { 
      return(items.size()); 
     } 

     public void addOverlay(OverlayItem overlay) { 

      items.add(overlay); 

      //System.out.println("success"); 

      populate(); 

     } 
} 



@Override 
    public boolean onDown(MotionEvent e) { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 
      float velocityY) { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    @Override 
    public void onLongPress(MotionEvent e) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, 
      float distanceY) { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    @Override 
    public void onShowPress(MotionEvent e) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public boolean onSingleTapUp(MotionEvent e) { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    @Override 
    public boolean onDoubleTap(MotionEvent e) { 
     controller.zoomIn(); 
     return false; 
    } 

    @Override 
    public boolean onDoubleTapEvent(MotionEvent e) { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    @Override 
    public boolean onSingleTapConfirmed(MotionEvent e) { 
     // TODO Auto-generated method stub 
     return false; 
    } 

} 

回答

0

我相信你真的必須創建一個GestureDetector使用它:我可能是錯的,但我沒有看到你實際做的是在你的代碼的任何地方。以this爲例。

+0

@femi ...謝謝你的迴應...但它仍然沒有工作對不起。 – android

+0

那麼,'MapActivity'類完全可能註冊它自己的'GestureDetector',你不能覆蓋,但更新你的代碼並顯示包括您正確創建GestureDetector的源代碼,也許我們將能夠爲您找到一些幫助。 – Femi

0

您可以創建一個GestureDetector來處理這個動作,可以實現一些蜱像這樣(的作品):

private long lastTouchTime = -1; 

@Override 
public boolean onTouchEvent(MotionEvent e, MapView mapView) { 
    long thisTime = System.currentTimeMillis(); 
    // 250 in TimeMillis is a good interval limit for a double click 
    if (thisTime - lastTouchTime < 250) { 
    // this is a double touch/tap 
    lastTouchTime = -1; 
    }else { 
    // this is a single touch/tap 
    lastTouchTime = thisTime; 
    } 
... 
} 

希望它有助於..