2013-05-01 66 views
2

如何更改my-location图层的基本蓝色。 我可以用标记替换它吗?或者我必须buld自定义瓷砖。地图v2 my-location图层样式

而我只能删除引脚半径,并保持车定位,我瓷砖

回答

2

我没有找到任何风格cusomization。标记不能被替换。

我做了一个自定义图块和一个自定义getCurrentLocation函数。

这里是我的代码:

首先,你需要在右上角找到我按钮瓷砖。我将它添加到布局:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    tools:context="android.support.v4.app.FragmentActivity" > 

    <fragment 
     android:id="@+id/tabs_fragment" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     class="com.bucons.savetime.MyMapFragment" /> 

    <ImageButton 
     android:id="@+id/myLocationButton" 
     android:layout_width="40dp" 
     android:layout_height="40dp" 
     android:padding="4dp" 
     android:layout_alignParentRight="true" 
     android:layout_marginRight="10dp" 
     android:layout_marginTop="10dp" 
     android:scaleType="fitCenter" 
     android:src="@drawable/ic_menu_mylocation" 
     android:background="@drawable/map_tile_bg" /> 
</RelativeLayout> 

所需要的资源是@绘制/ ic_menu_mylocation 你可以得到它:https://docs.google.com/file/d/0BzGos46YSzYfWkRYS2ZMNmdZREk/edit

而对于背景:@绘制/ map_tile_bg:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" 
      android:exitFadeDuration="@android:integer/config_shortAnimTime"> 
    <item android:state_pressed="true"> 
     <shape android:shape="rectangle"> 
      <stroke 
       android:width="1px" 
       android:color="@color/map_tile_bg_stroke_pressed"/> 
      <solid android:color="@color/map_tile_bg_solid_pressed"/> 
      <corners android:radius="1dp"/> 
     </shape> 
    </item> 
     <item> 
     <shape android:shape="rectangle"> 
      <stroke 
       android:width="1px" 
       android:color="@color/map_tile_bg_stroke"/> 
      <solid android:color="@color/map_tile_bg_solid"/> 
      <corners android:radius="1dp"/> 
     </shape> 
     </item> 
</selector> 

颜色转换器有:

<color name="map_tile_bg_solid">#aaffffff</color> 
<color name="map_tile_bg_stroke">#ffcccccc</color> 
<color name="map_tile_bg_solid_pressed">#aaFF9933</color> 
<color name="map_tile_bg_stroke_pressed">#ffcccccc</color> 

这里是我的片段:

public class MyMapFragment extends SupportMapFragment { 

    //Current location Marker 
    private Marker myLocationMarker; 

    GoogleMap map = null; 

    public MyMapFragment() { 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     setUpMapIfNeeded(); 
     getCurrentLocation(); 
    } 

    //set the map and set the tile for locate me button 
    private void setUpMapIfNeeded() { 
     // Do a null check to confirm that we have not already instantiated the map. 
     if (map == null) { 
      map = getMap(); 
      // Check if we were successful in obtaining the map. 
      if (map != null) { 
       //Top right button for go to location 
       ImageButton locateMeTile = (ImageButton) getSherlockActivity().findViewById(R.id.myLocationButton); 
       locateMeTile.setOnClickListener(new OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         getCurrentLocation(); 
        } 
       }); 
      } 
     } 
    } 

    //retrieve the current position. Only once 
    private void getCurrentLocation() { 
     locationManager = (LocationManager) getSherlockActivity().getSystemService(Context.LOCATION_SERVICE); 
     Criteria crit = new Criteria(); 
     String towers = locationManager.getBestProvider(crit, false); 

     Location location = locationManager.getLastKnownLocation(towers); 

     Double glat = null; 
     Double glon = null; 
     if(location != null){ 

      glat = location.getLatitude(); 
      glon = location.getLongitude(); 

     } 

     CameraPosition pos = new CameraPosition.Builder() 
     .target(new LatLng(glat, glon)) 
     .zoom(10) 
     .build();  

     if(pos != null) { 
      currLocationChange(pos.target); 
      map.animateCamera(CameraUpdateFactory.newCameraPosition(pos)); 
     } else { 
      Toast.makeText(getSherlockActivity(), R.string.main_error, Toast.LENGTH_LONG).show(); 
     } 
    } 

    //Add pin to the current Location or move existing 
    private void currLocationChange(LatLng loc) { 
     if(myLocationMarker != null) { 
      myLocationMarker.setPosition(new LatLng(loc.latitude,loc.longitude)); 
     } else { 
      myLocationMarker = map.addMarker(new MarkerOptions() 
        .position(new LatLng(loc.latitude,loc.longitude))); 
     } 
    } 
} 
+0

太棒了!感谢您的解决方案,工作perfrect – OFFmind 2013-08-27 09:35:28