2016-12-07 5 views
1

私は4つのタブを持つビューページャーを持っていて、タブの1つにマップがあります。 実行時にGoogleMapマーカーのアイコンをアンドロイドに変更します。私は、次のコードアンドロイド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の最初のタブで、私は地図を持っているとそれは断片だと言いました。

+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; 
    } 
関連する問題