当前位置: 首页 > 知识库问答 >
问题:

如何使用osmdroid/osmbonuspack更改标记气泡

岳宣
2023-03-14

Tei正在尝试用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) {

    }
}

任何建议都将得到高度赞赏!

共有1个答案

马清野
2023-03-14

本教程显示了您想要的内容。基本上,您重写了InfoWindow类,并为它提供自己的布局。

 类似资料:
  • 我发现了osmbonuspack,但是wiki中的API信息和文档非常少。 http://code.google.com/p/osmbonuspack/ 我认为这个库对升级osmdroid很有意思,但我无法学会使用它。 已经被人利用了?

  • 我在我的项目中使用OsmDroid。我导入的项目使用: 现在我想使用osmbonuspack,但是我找不到这个库的编译名。如何导入osmbonuspack?用罐子?

  • 我显示了一个标记来显示用户的位置,这是通过电话GPS获得的,并且我添加了一个FolderOverlay来分组其他标记(这些标记表示使用自定义API检索的Wikipedia中的POI)。 我在我的项目中包含了bonuspack_bubble.xml布局文件,因为我想修改它以适当地缩放“More Info”按钮。 问题 谢谢! 注意:使用osmbonuspack V5.3(AAR)、osmdroid

  • 我有一些我从互联网上下载的信息(文本和小的img),我想在我点击myMarkers类时显示它在气泡中。我希望这幅画既能画出风景,又不能画出风景。 问题 当应用程序是肖像的,当我杀死应用程序并重新运行它时,一切都在工作(当我点击时,我看到带有文本和img的气泡)。当我转向景观,当我的应用程序是不可见的,但活的,地图恢复标记,但当我点击他们,他们不显示气泡。 代码 这里是我的标记实现,它实现,以便在我

  • 对于android,我通过osmdroid和osmbonuspack使用mapsforge tiles。到目前为止,我使用了以下软件 OSMbonusPack Omsdroid mapsforge-map(依赖项)。 Salida软件解决方案,如http://www.salidasoftware.com/how-to-render-mapsforge-tiles-in-osmdroid所示 问题1

  • 我已经创建了osmdroid地图视图,在上面我可以显示自定义WMS,这很有效。接下来,我需要在地图上以GeoJSON格式从定制服务获得的两点之间绘制路线。GeoJSON如下所示:http://pastebin.com/GJWYNkAq 通过OkHttp客户端调用服务: 我使用以下方法用于此Osmbonuspack库: 当我运行应用程序,启动后崩溃与此错误: 03-09 13:01:51.521 3