2011-09-22 2 views
0

Я хочу добавить новое место, когда я долго касаюсь карты, я могу, но проблема в том, когда я добавляю оверлей, я не могу переместить карту. Код ниже.Как контролировать мой предметный оверлей на карте?

public class CustomPinPointOverlay extends ItemizedOverlay<OverlayItem> { 

    private GeoPoint newMarkerLocation; 

    public CustomPinPointOverlay(GeoPoint newMarkerLocation, 
      Drawable defaultMarker) { 

     super(boundCenterBottom(defaultMarker)); 
     this.newMarkerLocation = newMarkerLocation; 
     populate(); 
    } 

    @Override 
    protected OverlayItem createItem(int i) { 
     return new OverlayItem(this.newMarkerLocation, null, null); 
    } 

    public void draw(android.graphics.Canvas canvas, MapView mapView, 
      boolean shadow) { 
     super.draw(canvas, mapView, false); 
    } 

    @Override 
    public int size() { 
     return 1; 
    } 
} 

это мой класс оверлея, который расширяет itemizedoverlay. другая часть кода;

public PMapView(Context context, AttributeSet attrs) { 
    super(context, attrs); 

    setOnTouchListener(new OnTouchListener() { 

     int x, y; 
     long start, stop; 


     @Override 
     public boolean onTouch(View v, MotionEvent e) { 

      if (e.getAction() == MotionEvent.ACTION_DOWN) { 

       start = e.getEventTime(); 
       x = (int) e.getX(); 
       y = (int) e.getY(); 

       touchedPoint = map.getProjection().fromPixels(x, y); 
      } 
      if (e.getAction() == MotionEvent.ACTION_UP) { 
       stop = e.getEventTime(); 

      } 

      if (stop - start > 1000) { 

       setEnabled(true); 
       Drawable myMarker = getResources().getDrawable(
         R.drawable.yeni_pin); 
       getOverlays().add(
         new CustomPinPointOverlay(touchedPoint, myMarker)); 


       return false; 
      } 


      return true; 
     } 


    }); 

} 

что с этим кодом?

+0

Я думаю, проблема в том, что мой setOnTouchListener. На мой взгляд, прослушиватель setontouch прослушивает мое прикосновение, пока я не нажму долго. я имею в виду, если я ничего не делаю, кроме stop-start> 1000 мой setontouchlistener продолжает слушать, пока я это не сделаю. Я прав? – sharp

ответ

1

Этот ответ предполагает, что ваш PMapView расширяет MapView.

Если приведенное выше утверждение верно, вы должны попробовать позвонить в ваш суперклас onTouchEvent, если вы не справитесь с ним. Например (это ваш код изменен, но я не проверял)

@Override 
    public boolean onTouch(View v, MotionEvent e) { 

     boolean retValue = true; 
     if (e.getAction() == MotionEvent.ACTION_DOWN) { 

      start = e.getEventTime(); 
      x = (int) e.getX(); 
      y = (int) e.getY(); 

      touchedPoint = map.getProjection().fromPixels(x, y); 
     } 
     if (e.getAction() == MotionEvent.ACTION_UP) { 
      stop = e.getEventTime(); 

     } 

     if (stop - start > 1000) { 

      setEnabled(true); 
      Drawable myMarker = getResources().getDrawable(
        R.drawable.yeni_pin); 
      getOverlays().add(
        new CustomPinPointOverlay(touchedPoint, myMarker)); 


      retValue = false; 
     } 

     if(!retValue) 
      super.onTouchEvent(e); 
     return retValue; 
    } 

Приведенный выше код будет проходить на действия, которые не учитываются (ваш длинный щелчок захватывается) обратно к родителю, поэтому он может обрабатывать такие вещи, как перемещение карты. Этот код не был протестирован, поэтому он может дать странные результаты. Вы можете удалить if(!retValue) и просто позвонить по телефону super.onTouchEvent(e).

 Смежные вопросы

  • Нет связанных вопросов^_^