Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用OSMDROID/OSMBonusPack更改标记气泡_Java_Android_Xml_Openstreetmap_Osmdroid - Fatal编程技术网

Java 如何使用OSMDROID/OSMBonusPack更改标记气泡

Java 如何使用OSMDROID/OSMBonusPack更改标记气泡,java,android,xml,openstreetmap,osmdroid,Java,Android,Xml,Openstreetmap,Osmdroid,我试图用OSM地图取代我应用程序中的谷歌地图。我一直在尝试通过以下方式使用:如何使用Jitpack安装和导入项目。 它很好用。点击标记时,会显示默认信息气泡(一些浅灰色气泡)。如果我想修改标记气泡的背景,我应该怎么做?我的代码中没有使用任何onClick方法 import android.app.Fragment; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.view.L

我试图用OSM地图取代我应用程序中的谷歌地图。我一直在尝试通过以下方式使用:如何使用Jitpack安装和导入项目。 它很好用。点击标记时,会显示默认信息气泡(一些浅灰色气泡)。如果我想修改标记气泡的背景,我应该怎么做?我的代码中没有使用任何onClick方法

 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) {

    }
}
导入android.app.Fragment;
导入android.graphics.drawable.drawable;
导入android.os.Bundle;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入org.osmdroid.api.IMapController;
导入org.osmdroid.tileprovider.tilesource.TileSourceFactory;
导入org.osmdroid.util.GeoPoint;
导入org.osmdroid.views.MapView;
导入org.osmdroid.views.overlay.Marker;
导入org.osmdroid.views.overlay.ScaleBarOverlay;
导入java.util.ArrayList;
导入java.util.List;
导入demo.exe.exe.R;
导入demo.exe.exe.model.Education.EducationServiceProviderItem;
导入demo.exe.exe.utils.AppConstants;
public类mappfragmentosm扩展了Fragment实现View.OnClickListener{
private ArrayList educationServiceProvider=null;
地图视图;
int子类yid;
视图根视图;
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
双人拉特双人,长双人;
int i=0;
super.onCreate(savedInstanceState);
rootView=充气机。充气(R.layout.fragment\u地图,容器,
假);
mapView=(mapView)rootView.findViewById(R.id.mapView);
mapView.setClickable(真);
mapView.SetBuilTinZoomControl(真);
设置多点触控控件(真);
setUseDataConnection(true);
;
setTileSource(TileSourceFactory.MAPQUESTOSM);
IMapController mapViewController=mapView.getController();
if(locationNameId==1){
mapViewController.setZoom(18);
设置中心(AppConstants.BAUNIA1);
}
else if(locationNameId==2)
{
mapViewController.setZoom(17);
mapViewController.setCenter(AppConstants.PARIS1);
}
开关(类别ID)
{
案例1.教育:
if(educationServiceProvider!=null){
for(EducationServiceProviderItem et:educationServiceProvider){
//LatLng location=新LatLng(Double.parseDouble(et.getLatitude()),Double.parseDouble(et.getLatitude());
subcategotyId=et.getEduSubCategoryId();
latDouble=Double.parseDouble(et.getLatitude());
longDouble=Double.parseDouble(et.getLongitude());
地质点=新的地质点(latDouble、longDouble);
drawMarkerEdu(point,et.getEduNameEng(),et.getAddress(),et.getedusubcategorid());
}
}
打破
违约:
打破
}
//添加比例尺
ScaleBarOverlay myScaleBarOverlay=新的ScaleBarOverlay(地图视图);
mapView.getOverlays().add(myScaleBarOverlay);
返回rootView;
}
专用void drawMarkerEdu(地质点、字符串标题、字符串地址、int子类别ID){
标记=新标记(地图视图);
标记器。设置位置(点);
marker.setAnchor(marker.ANCHOR\u中心,marker.ANCHOR\u底部);

如果(subcategotyId>=1&&subcategotyId=13&&subcategotyId=18&&subcategotyId=20&&subcategotyId=22&&subcategotyId显示您想要的内容。基本上,您覆盖了InfoWindow类并为其提供了自己的布局。

非常感谢!我已经能够使用自定义背景。但以前,这个标记通常是在map.现在不起作用了。你能给点建议吗?@Override公共布尔singleTapConfirmedHelper(GeoPoint p){Toast.makeText(getActivity(),“点击(“+p.getLatitude()+”,“+p.GetLength()”),Toast.LENGTH_SHORT.).show();MyInfoWindow.CloseAllInfoWindowOn(mapView);返回true;}从未调用此函数。地图中的活动或片段是否在ImplementMapEventsReceiver中?请确保在使用MapEventsOverlay MapEventsOverlay=new MapEventsOverlay(getActivity(),This);osmv.getOverlays().add(0,MapEventsOverlay)加载地图时实际设置了事件覆盖;