Android 安卓谷歌地图标记';s图标不';不改变

Android 安卓谷歌地图标记';s图标不';不改变,android,google-maps,google-maps-api-3,Android,Google Maps,Google Maps Api 3,我有一个Viewpager,它有4个选项卡,其中一个选项卡有地图。 我将在运行时更改android GoogleMap marker的图标。我做了以下代码 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View rootVi

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

    @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的第一个选项卡,我说它有一个映射,它是一个片段。

上述问题的问题是图标在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;
    }

上述问题的问题是图标在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;
    }

这是因为每当您的位置发生变化时,您都会添加一个新的标记。单击标记时,其图标会更改为徽标,但几秒钟后,位置也会更改,代码会添加一个带有位置图标的新标记,因为新位置接近旧位置,新标记与旧标记重叠。@HarjotSinghOberai您有任何解决方案来实现此目标吗?请详细说明您试图实现的目标。@HarjotSinghOberai我想在用户点击标记时更改地图标记图标,第二次点击谷歌地图标记图标时,相机打开,用户可以拍照等等要在位置更改时添加新标记吗?或者您希望标记移动到新位置?这是因为每当您的位置发生变化时,您都要添加新标记。单击标记时,其图标会更改为徽标,但几秒钟后,位置也会更改,代码会添加一个带有位置图标的新标记,因为新位置接近旧位置,新标记与旧标记重叠。@HarjotSinghOberai您有任何解决方案来实现此目标吗?请详细说明您试图实现的目标。@HarjotSinghOberai我想在用户点击标记时更改地图标记图标,第二次点击谷歌地图标记图标时,相机打开,用户可以拍照等等要在位置更改时添加新标记吗?或者您希望标记移动到新位置?