2014-11-07 5 views
6

Mapbox Android SDK में मार्कर ड्रैग करने योग्य कैसे बनाएं? क्या यह भी संभव है?मैपबॉक्स एंड्रॉइड एसडीके - ड्रैगगेबल मार्कर

यदि नहीं, तो कौन सा अन्य मुक्त खुला नक्शा इंजन इस सुविधा का समर्थन करता है?

धन्यवाद!

उत्तर

-4

क्या आपने पत्रिका की खोज की है? वे एंड्रॉइड, आईओएस और सभी मानक मोबाइल प्लेटफार्मों का समर्थन करते हैं। जहां तक ​​मुझे याद है, यहां तक ​​कि मैपबॉक्स एसडीके भी पत्रक पर बनाया गया है। http://leafletjs.com/examples/mobile.html

+2

मैपबॉक्स एंड्रॉइड एसडीके मूल है, न कि वेब-आधारित और/या पत्रक पर आधारित है। – incanus

5

मैं अपनी परियोजनाओं में से एक के लिए खींचने योग्य मार्कर को लागू करने के लिए किया था:

यहाँ एक लिंक का उल्लेख कर सकते हैं। मुझे मिला एकमात्र समाधान ड्रैग इवेंट के लिए मेहोड जांच के साथ मौजूदा मार्कर क्लास का विस्तार करना और तदनुसार मार्कर स्थिति अपडेट करना है।

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; 
    } 
} 

बाद में आप MapView पर स्पर्श इवेंट का श्रोता जोड़ें और देखें कि क्या आपका मार्कर (या अपने मार्कर संग्रह में कई में से एक) घटना से प्रभावित होता है की जरूरत है।

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); 
    } 
}); 
संबंधित मुद्दे