2009-11-20 3 views

答えて

3

MapActivityをお使いですか?ここで私が使用したコードは次のとおりです。

MapView mapView = (MapView)findViewById(R.id.map); 
Projection projection = mapView.getProjection(); 
int y = mapView.getHeight()/2; 
int x = mapView.getWidth()/2; 

GeoPoint geoPoint = projection.fromPixels(x, y); 
double centerLatitude = (double)geoPoint.getLatitudeE6()/(double)1E6; 
double centerLongitude = (double)geoPoint.getLongitudeE6()/(double)1E6; 

ます。また、このようなコードを追加する必要があります:

@Override 
public boolean dispatchTouchEvent(MotionEvent event) 
{ 
    boolean result = super.dispatchTouchEvent(event); 
    if (event.getAction() == MotionEvent.ACTION_UP) 
     reload_map_data(); /// call the first block of code here 
    return result; 
} 
+0

これは、あなたが(あなたがあなたの指を持ち上げた後) –

+0

こんにちは、返信marccに感謝し、それを投げつける場合マップは少しやり方を動かし続ける「情事」を扱うんが、私はパンアニメーションが停止するときを検出する方法を見つける必要があります私はあなたのセンター計算コードをその時点で使用することができます。 – vamsibm

12

私もマップを検出し、「やったエンド・ドラッグ」ソリューションを探しています地図の移動が終了した直後の現在の中心。私はそれを見つけられていないので、私はこのうまく動作した簡単な実装を作った:

private class MyMapView extends MapView { 

    private GeoPoint lastMapCenter; 
    private boolean isTouchEnded; 
    private boolean isFirstComputeScroll; 

    public MyMapView(Context context, String apiKey) { 
     super(context, apiKey); 
     this.lastMapCenter = new GeoPoint(0, 0); 
     this.isTouchEnded = false; 
     this.isFirstComputeScroll = true; 
    } 
    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     if (event.getAction() == MotionEvent.ACTION_DOWN) 
      this.isTouchEnded = false; 
     else if (event.getAction() == MotionEvent.ACTION_UP) 
      this.isTouchEnded = true; 
     else if (event.getAction() == MotionEvent.ACTION_MOVE) 
      this.isFirstComputeScroll = true; 
     return super.onTouchEvent(event); 
    } 
    @Override 
    public void computeScroll() { 
     super.computeScroll(); 
     if (this.isTouchEnded && 
      this.lastMapCenter.equals(this.getMapCenter()) && 
      this.isFirstComputeScroll) { 
      // here you use this.getMapCenter() (e.g. call onEndDrag method) 
      this.isFirstComputeScroll = false; 
     } 
     else 
      this.lastMapCenter = this.getMapCenter(); 
    } 
} 

これは、それが助けてくれることを望む! O/

+0

これはうまくいきました。 – Federico

0

Android向け2016の8月マップは、onCameraMoveStartedなどのイベント(および移動理由、例えば、REASON_GESTUREREASON_DEVELOPER_ANIMATIONを検出することができるので。

ほとんどdocsから採取された次のコード()を得ますあなたが達成できるかのアイデア:?。

public class MyCameraActivity extends FragmentActivity implements 
     OnCameraMoveStartedListener, 
     OnCameraMoveListener, 
     OnCameraMoveCanceledListener, 
     OnCameraIdleListener, 
     OnMapReadyCallback { 

    private GoogleMap mMap; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_my_camera); 

     SupportMapFragment mapFragment = 
      (SupportMapFragment) getSupportFragmentManager() 
        .findFragmentById(R.id.map); 
     mapFragment.getMapAsync(this); 
    } 

    @Override 
    public void onMapReady(GoogleMap map) { 
     mMap = map; 

     mMap.setOnCameraIdleListener(this); 
     mMap.setOnCameraMoveStartedListener(this); 
     mMap.setOnCameraMoveListener(this); 
     mMap.setOnCameraMoveCanceledListener(this); 

     // Show Sydney on the map. 
     mMap.moveCamera(CameraUpdateFactory 
       .newLatLngZoom(new LatLng(-33.87365, 151.20689), 10)); 
    } 

    @Override 
    public void onCameraMoveStarted(int reason) { 

     if (reason == OnCameraMoveStartedListener.REASON_GESTURE) { 
      Toast.makeText(this, "The user gestured on the map.", 
          Toast.LENGTH_SHORT).show(); 
     } else if (reason == OnCameraMoveStartedListener 
           .REASON_API_ANIMATION) { 
      Toast.makeText(this, "The user tapped something on the map.", 
          Toast.LENGTH_SHORT).show(); 
     } else if (reason == OnCameraMoveStartedListener 
           .REASON_DEVELOPER_ANIMATION) { 
      Toast.makeText(this, "The app moved the camera.", 
          Toast.LENGTH_SHORT).show(); 
     } 
    } 

    @Override 
    public void onCameraMove() { 
     Toast.makeText(this, "The camera is moving.", 
         Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onCameraMoveCanceled() { 
     Toast.makeText(this, "Camera movement canceled.", 
         Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onCameraIdle() { 
     Toast.makeText(this, "The camera has stopped moving.", 
         Toast.LENGTH_SHORT).show(); 
     // Here you get the camera center 
     GeoPoint geoPoint = projection.fromPixels(mMap.getHeight()/2, mMap.getWidth()/2); 
     double centerLat = (double)geoPoint.getLatitudeE6()/(double)1E6; 
     double centerLng = (double)geoPoint.getLongitudeE6()/(double)1E6; 
    } 
} 
関連する問題