2011-09-22 18 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です。私の意見では、私は長い間クリックするまで私のタッチを聞いています。私が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)に電話してください。

関連する問題