【问题标题】:android googlemap marker's icon doesn't changedandroid googlemap标记的图标没有改变
【发布时间】:2016-12-08 16:59:13
【问题描述】:

我有一个 Viewpager,它有 4 个选项卡,其中一个选项卡有一张地图。 我要在运行时更改 android GoogleMap 标记的图标。我做了以下代码

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        final View rootView = inflater.inflate(R.layout.fragment_menu, container, false);


        mMapView = (MapView) rootView.findViewById(R.id.mapView);
        mMapView.onCreate(savedInstanceState);

        mMapView.onResume(); // needed to get the map to display immediately
        try {
            MapsInitializer.initialize(getActivity().getApplicationContext());
        } catch (Exception e) {
            e.printStackTrace();
        }
        mMapView.getMapAsync(new OnMapReadyCallback() {
            @Override
            public void onMapReady(GoogleMap mMap) {
                googleMap = mMap;

                // For showing a move to my location button
                googleMap.setMyLocationEnabled(true);

                // For dropping a marker at a point on the Map

                /* googleMap.addMarker(new MarkerOptions().position(sydney).title("Marker Title").snippet("Marker Description")).
                        setIcon(BitmapDescriptorFactory.fromResource(R.drawable.position_icon));*/
googleMap.setOnMyLocationChangeListener(new GoogleMap.OnMyLocationChangeListener() {

    @Override
    public void onMyLocationChange(Location location) {

        sydney=new LatLng(location.getLatitude(), location.getLongitude());
        googleMap.addMarker(new MarkerOptions().position(sydney).title(""))
        .setIcon(BitmapDescriptorFactory.fromResource(R.drawable.position_icon));
        CameraPosition cameraPosition = new CameraPosition.Builder().target(sydney).zoom(12).build();
        googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));

       googleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
            @Override
            public boolean onMarkerClick(Marker marker) {
                marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.logo));
                return false;
            }
        });
    }


});

                // For zooming automatically to the location of the marker
               /* */
            }
        });
        return rootView;
    }

但不幸的是,然后我点击标记图标,它已更改,但几秒钟后,前一个标记与新标记图标重叠。 上面的代码是 TabLayout 的第一个选项卡,我说它有一个地图,它是一个片段。

【问题讨论】:

  • 发生这种情况是因为每当您的位置发生变化时,您都会添加一个新标记。当您单击一个标记时,其图标会变为 logo,但几秒钟后,位置也会发生变化,并且您的代码会添加一个带有 position_icon 的新标记,因为新位置靠近旧位置,新标记与旧位置重叠。
  • @HarjotSinghOberai 你有什么解决方案来实现这个目标
  • 您能否详细说明您要达到的目标。
  • @HarjotSinghOberai 我想在用户点击标记时更改地图标记图标,并在第二次点击相机打开的 googlemap 标记图标时更改地图标记图标,以此类推
  • 您想在位置变化时添加新标记吗?或者您希望标记移动到新位置?

标签: android google-maps google-maps-api-3


【解决方案1】:

上述问题的问题是图标在 onClickItem 事件中更改后会被撤销。所以我定义了一个类全局属性名称 marker_change 然后用简单的 if 语句控制。

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        final View rootView = inflater.inflate(R.layout.fragment_menu, container, false);


        mMapView = (MapView) rootView.findViewById(R.id.mapView);
        mMapView.onCreate(savedInstanceState);

        mMapView.onResume(); // needed to get the map to display immediately
        try {
            MapsInitializer.initialize(getActivity().getApplicationContext());
        } catch (Exception e) {
            e.printStackTrace();
        }
        mMapView.getMapAsync(new OnMapReadyCallback() {
            @Override
            public void onMapReady(GoogleMap mMap) {
                googleMap = mMap;

                // For showing a move to my location button
                googleMap.setMyLocationEnabled(true);

                // For dropping a marker at a point on the Map

                /* googleMap.addMarker(new MarkerOptions().position(sydney).title("Marker Title").snippet("Marker Description")).
                        setIcon(BitmapDescriptorFactory.fromResource(R.drawable.position_icon));*/
googleMap.setOnMyLocationChangeListener(new GoogleMap.OnMyLocationChangeListener() {

    @Override
    public void onMyLocationChange(Location location) {

        sydney=new LatLng(location.getLatitude(), location.getLongitude());
        googleMap.addMarker(new MarkerOptions().position(sydney))
        .setIcon(BitmapDescriptorFactory.fromResource(R.drawable.position_icon));

        CameraPosition cameraPosition = new CameraPosition.Builder().target(sydney).zoom(12).build();
        googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));

        googleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
            @Override
            public boolean onMarkerClick(final Marker marker) {

marker_change=1;
                return false;
            }
        });

               if(marker_change==1) {

                   googleMap.clear();
                   MarkerOptions mo=new MarkerOptions().position(sydney).title("please take pic").snippet("apple")
                           .icon(BitmapDescriptorFactory.fromResource(R.drawable.address_icon));

//            googleMap.addMarker(mo).setIcon(BitmapDescriptorFactory.fromResource(R.drawable.ic_new_mark_icon));;
                   googleMap.addMarker(mo).setIcon(BitmapDescriptorFactory.fromResource(R.drawable.ic_new_mark_icon));

                   cameraPosition = new CameraPosition.Builder().target(sydney).zoom(12).build();
                   googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
               } else {
                   marker_change=0;
               }

    }


});


            }
        });
        return rootView;
    }

【讨论】:

    猜你喜欢
    • 2016-03-29
    • 2014-08-06
    • 2022-12-15
    • 2013-11-19
    • 2015-08-17
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多