2016-12-07 1 views
1

저는 4 개의 탭이 있고 하나의 탭에지도가있는 Viewpager가 있습니다. 런타임에 GoogleMap 아이콘 아이콘을 Android에서 변경할 예정입니다. 다음 코드를 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의 첫 번째 탭입니다.이 TabLayout은지도가 있고 조각입니다.

+0

위치가 변경 될 때마다 새 마커를 추가하기 때문에 상황이 발생합니다. 마커를 클릭하면 아이콘이 ** 로고 **로 변경되지만 위치가 몇 초 후에 변경되고 코드에서 ** position_icon **이 (가) 새 마커를 추가하고 새 위치가 이전 위치에서 새 마커는 이전 마커와 겹칩니다. –

+0

@HarjotSinghOberai이 목표를 달성하기위한 어떤 해결책이 있습니까? – Sandro

+0

달성하고자하는 것을 정교하게 설명해 주실 수 있습니까? –

답변

0

위의 질문에 대한 문제는 아이콘이 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; 
    } 
관련 문제