Тъй като не намерих никаква информация в интернет за това. На Български изобщо го няма.
Но ми трябваше да редактирам бутона на Maps v2 за Android LocateMe, както и синия пин с радиуса. Това се постига с setMyLocationEnabled(true).
Ето и моето решение с фрагменти:
Първо добавям ImageButton за бутона при фрагмента за layout на картата (activity_map.xml):
<?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>
Има ресурси, които трябва да се добавят за да се вижда като картата по подразбиране.
@drawable/ic_menu_mylocation може да вземете
а за фона: @drawable/map_tile_bg пак, чрез xml:
<?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))); } } }
Ако съм изпуснал нещо важно може да ми пишете. При натискане на бутона картата опива при местоположението на човека и постава маркер. Както и при стартиране на апликацията. Идеята е, че маркера може да се стилизира по желание. Както и бутона за локация.