Jak zrobić znacznik przeciągalny w Mapbox Android SDK? Czy to możliwe?Mapbox Android SDK - znacznik do przeciągnięcia
Jeśli nie, to jaki inny darmowy mechanizm mapowania obsługuje tę funkcję?
Dzięki!
Jak zrobić znacznik przeciągalny w Mapbox Android SDK? Czy to możliwe?Mapbox Android SDK - znacznik do przeciągnięcia
Jeśli nie, to jaki inny darmowy mechanizm mapowania obsługuje tę funkcję?
Dzięki!
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
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);
}
});
Zestaw map SDK systemu Android jest natywny, a nie internetowy i/lub oparty na ulotce. – incanus