2014-11-07 12 views

Odpowiedz

-4

Czy zgłębiłeś broszurę? Obsługują Androida, IOS i wszystkie standardowe platformy mobilne. O ile pamiętam, nawet Mapbox SDK został zbudowany nad ulotką.

Oto link można znaleźć na stronie: http://leafletjs.com/examples/mobile.html

+2

Zestaw map SDK systemu Android jest natywny, a nie internetowy i/lub oparty na ulotce. – incanus

5

musiałem realizować można przeciągać znaczniki dla jednego z moich projektów. Jedynym rozwiązaniem, które znalazłem, jest rozszerzenie istniejącej klasy Markera o sprawdzanie przez narzędzie Mehod zdarzenia przeciągania i odpowiednio aktualizowanie położenia znacznika.

package com.example.map; 

import android.graphics.PointF; 
import android.graphics.Rect; 
import android.graphics.RectF; 
import android.util.Log; 
import android.view.MotionEvent; 
import android.view.View; 

import com.mapbox.mapboxsdk.api.ILatLng; 
import com.mapbox.mapboxsdk.geometry.LatLng; 
import com.mapbox.mapboxsdk.overlay.Marker; 
import com.mapbox.mapboxsdk.views.MapView; 
import com.mapbox.mapboxsdk.views.util.Projection; 

public class DraggableMarker extends Marker { 

    private static final String TAG = "map.DraggableMarker"; 

    private boolean mIsDragged; 
    private static final RectF mTempRect = new RectF(); 
    private static final PointF mTempPoint = new PointF(); 
    private float mDx, mDy; 

    public DraggableMarker(String title, String description, LatLng latLng) { 
     super(title, description, latLng); 
     mIsDragged = false; 
    } 

    public DraggableMarker(MapView mv, String aTitle, String aDescription, LatLng aLatLng) { 
     super(mv, aTitle, aDescription, aLatLng); 
     mIsDragged = false; 
    } 

    public boolean drag(View v, MotionEvent event) { 
     final int action = event.getActionMasked(); 
     if(action == MotionEvent.ACTION_DOWN) { 
      Projection pj = ((MapView)v).getProjection(); 
      RectF bound = getDrawingBounds(pj, mTempRect); 
      if(bound.contains(event.getX(), event.getY())) { 
       mIsDragged = true; 
       PointF p = getPositionOnScreen(pj, mTempPoint); 
       mDx = p.x - event.getX(); 
       mDy = p.y - event.getY(); 
      } 
     } 
     if(mIsDragged) { 
      if((action == MotionEvent.ACTION_CANCEL) || 
        (action == MotionEvent.ACTION_UP)) { 
       mIsDragged = false; 
      } else { 
       Projection pj = ((MapView)v).getProjection(); 
       ILatLng pos = pj.fromPixels(event.getX() + mDx, event.getY() + mDy); 
       setPoint(new LatLng(pos.getLatitude(), pos.getLongitude())); 
      } 
     } 

     return mIsDragged; 
    } 
} 

Później trzeba dodać słuchacza zdarzeń dotykowych na MapView i sprawdzić, czy marker (lub jeden z wielu w swojej kolekcji markera) zależy od przypadku.

mMarker = new DraggableMarker(mMapView, "", "", aCenter); 
mMarker.setIcon(new Icon(getActivity().getApplicationContext(), Icon.Size.SMALL, "marker-stroked", "FF0000")); 
mMapView.addMarker(mMarker); 

mMapView.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     return mMarker.drag(v, event); 
    } 
}); 
Powiązane problemy