2016-05-11 3 views
1

Ich versuche Google Karte in meiner Anwendung durch OSM-Karte zu ersetzen. Ich habe versucht, this zu verwenden, indem ich ihre Anweisungen zum Installieren und Importieren des Projekts mit Jitpack befolge. Es funktioniert gut. Beim Tippen auf Marker werden Standard-Info-Blasen (einige hellgraue) angezeigt. Was soll ich tun, wenn ich den Hintergrund der Marker Blase ändern möchten? Ich bin nicht jede Art von onClick Methode in meinem Code verwendenSo ändern Sie die Marker-Blase mit OSMDROID/OSMBonusPack

import android.app.Fragment; 
import android.graphics.drawable.Drawable; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import org.osmdroid.api.IMapController; 
import org.osmdroid.tileprovider.tilesource.TileSourceFactory; 
import org.osmdroid.util.GeoPoint; 
import org.osmdroid.views.MapView; 
import org.osmdroid.views.overlay.Marker; 
import org.osmdroid.views.overlay.ScaleBarOverlay; 
import java.util.ArrayList; 
import java.util.List; 
import demo.exe.exe.R; 
import demo.exe.exe.model.Education.EducationServiceProviderItem; 
import demo.exe.exe.utils.AppConstants; 


public class MapFragmentOSM extends Fragment implements View.OnClickListener { 

    private ArrayList<EducationServiceProviderItem> educationServiceProvider=null; 
MapView mapView; 
    int subcategotyId; 
    View rootView; 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     double latDouble,longDouble; 
     int i=0; 
     super.onCreate(savedInstanceState); 
     rootView = inflater.inflate(R.layout.fragment_map, container, 
       false); 

     mapView = (MapView) rootView.findViewById(R.id.mapview); 
     mapView.setClickable(true); 
     mapView.setBuiltInZoomControls(true); 
     mapView.setMultiTouchControls(true); 
     mapView.setUseDataConnection(true); 

; 
     mapView.setTileSource(TileSourceFactory.MAPQUESTOSM); 

     IMapController mapViewController = mapView.getController(); 



     if(locationNameId==1) { 

      mapViewController.setZoom(18); 
      mapViewController.setCenter(AppConstants.BAUNIA1); 
     } 
     else if(locationNameId==2) 
     { 
      mapViewController.setZoom(17); 
      mapViewController.setCenter(AppConstants.PARIS1); 
     } 
     switch (categoryId) 
     { 
      case AppConstants.EDUCATION: 
       if(educationServiceProvider!=null) { 
        for (EducationServiceProviderItem et : educationServiceProvider) { 
        // LatLng location = new LatLng(Double.parseDouble(et.getLatitude()), Double.parseDouble(et.getLongitude())); 
         subcategotyId = et.getEduSubCategoryId(); 
         latDouble=Double.parseDouble(et.getLatitude()); 
         longDouble=Double.parseDouble(et.getLongitude()); 
         GeoPoint point= new GeoPoint(latDouble,longDouble); 
         drawMarkerEdu(point, et.getEduNameEng(),et.getAddress(), et.getEduSubCategoryId()); 
        } 
       } 
       break; 


      default: 
       break; 

     } 

     //Add Scale Bar 
     ScaleBarOverlay myScaleBarOverlay = new ScaleBarOverlay(mapView); 
     mapView.getOverlays().add(myScaleBarOverlay); 


     return rootView; 
    } 
    private void drawMarkerEdu(GeoPoint point,String title,String address,int subcategotyId) { 
     Marker marker = new Marker(mapView); 
     marker.setPosition(point); 
     marker.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM); 


     if (subcategotyId >= 1 && subcategotyId <= 12) 
      marker.setIcon(this.getResources().getDrawable(R.drawable.pin_feroza)); 
     else if (subcategotyId >= 13 && subcategotyId <= 17) 
      marker.setIcon(this.getResources().getDrawable(R.drawable.pin_blue)); 
     else if (subcategotyId >= 18 && subcategotyId <= 19) 
      marker.setIcon(this.getResources().getDrawable(R.drawable.pin_pink)); 
     else if (subcategotyId >= 20 && subcategotyId <= 21) 
      marker.setIcon(this.getResources().getDrawable(R.drawable.pin_green)); 
     else if (subcategotyId >= 22 && subcategotyId <= 26) 
      marker.setIcon(this.getResources().getDrawable(R.drawable.pin_yellow)); 
     marker.setSnippet(title); 
     marker.setSubDescription(address); 
     mapView.getOverlays().add(marker); 


    } 
    @Override 
    public void onClick(View v) { 

    } 
} 

Jeder möglicher Vorschlag sehr geschätzt!

Antwort

2

This tutorial zeigt genau, was Sie wollen. Im Grunde überschreiben Sie die InfoWindow-Klasse und geben ihr ein eigenes Layout.

+0

vielen dank! Ich konnte benutzerdefinierten Hintergrund verwenden. Vorher wurde dieser Marker jedoch auf der Karte entfernt. jetzt funktioniert es nicht. Kannst du etwas vorschlagen? @Override public boolean singleTapConfirmedHelper (GeoPoint p) { Toast.makeText (getActivity() "Tippen auf (" + p.getLatitude() + "" + p.getLongitude() + ")", Toast.LENGTH_SHORT).Show(); MyInfoWindow.closeAllInfoWindowsOn (mapView); Rückkehr wahr; } Dies wird nie aufgerufen. – user232803

+0

Liegt die Aktivität oder das Fragment Ihrer Map in MapEventsReceiver vor? – Ruben2112

+2

Stellen Sie sicher, dass Sie das Ereignis-Overlay tatsächlich festlegen, wenn die Map mit MapEventsOverlay geladen wird mapEventsOverlay = new MapEventsOverlay (getActivity(), this); osmv.getOverlays(). Add (0, mapEventsOverlay); – Ruben2112

Verwandte Themen