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!
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
Liegt die Aktivität oder das Fragment Ihrer Map in MapEventsReceiver vor? – Ruben2112
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