Карта Google в Android, отображение в малом размере

Я хочу отобразить местоположение на карте, а размер карты должен быть 200X200. Я попробовал загрузить карту в mapview, но не отображал ее правильно, нажав на указатель направления 2 до 3 раз, отображая правильную карту, но не двигаясь.

карта

Но когда я использую полный размер экрана для отображения карты без изменения какого-либо кода, это правильно загружается. Как я могу отобразить тот же самый маленький вид?

Код карты-

static GoogleMap map; private MapView mapView; MapsInitializer.initialize(getApplicationContext()); switch (GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplicationContext()) ) { case ConnectionResult.SUCCESS: //Toast.makeText(getActivity(), "SUCCESS", Toast.LENGTH_SHORT).show(); mapView = (MapView)findViewById(R.id.map); mapView.onCreate(savedInstanceState); // Gets to GoogleMap from the MapView and does initialization stuff if(mapView!=null) { map = mapView.getMap(); map.getUiSettings().setMyLocationButtonEnabled(false); map.setMyLocationEnabled(true); CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(location, 10); map.animateCamera(cameraUpdate); map.setMapType(GoogleMap.MAP_TYPE_NORMAL); } break; case ConnectionResult.SERVICE_MISSING: //Toast.makeText(getActivity(), "SERVICE MISSING", Toast.LENGTH_SHORT).show(); break; case ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED: //Toast.makeText(getActivity(), "UPDATE REQUIRED", Toast.LENGTH_SHORT).show(); break; default: Toast.makeText(getApplicationContext(), GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplicationContext()), Toast.LENGTH_SHORT).show(); } CameraPosition cameraPosition = new CameraPosition.Builder() .target(location).zoom(10).bearing(0) // Sets the orientation of the camera to east .tilt(70) // Sets the tilt of the camera to 30 degrees .build(); // Creates a CameraPosition from the builder map.setBuildingsEnabled(true); map.setMyLocationEnabled(true); map.setMapType(GoogleMap.MAP_TYPE_NORMAL); map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); 

Решение. Выполнено с использованием фрагмента –

map_screen.xml

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <fragment android:id="@+id/mapfragment" android:layout_width="wrap_content" android:layout_height="200dp" android:layout_alignParentTop="true" android:layout_gravity="center_horizontal" class="com.google.android.gms.maps.SupportMapFragment" /> <TextView android:id="@+id/reg_office_title" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@+id/mapfragment" android:layout_gravity="center_horizontal" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:layout_marginTop="5dp" android:gravity="center" android:text="@string/tata_auto" android:textColor="@color/tatablue" android:textSize="18sp" /> </RelativeLayout> 

Java-код –

 public class MapFragment extends Fragment { private View view; public GoogleMap map; private Location location; private LatLng mAddress1; public static boolean inMap=false; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { // TODO Auto-generated method stub view= inflater.inflate(R.layout.contact_map, container, false); setMapView(); return view; } private void setMapView(){ CurrentLocation mCurrentLoc=new CurrentLocation(getActivity()); location = CurrentLocation.locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); if (location != null) { mCurrentLoc.onLocationChanged(location); } else { mCurrentLoc.onLocationChanged(location); } //class="com.google.android.gms.maps.SupportMapFragment" map = ((SupportMapFragment)getActivity().getSupportFragmentManager().findFragmentById(R.id.mapfragment)).getMap(); CameraPosition cameraPosition = new CameraPosition.Builder() .target(mAddress1).zoom(8).bearing(0) // Sets the orientation of the camera to east .tilt(30) // Sets the tilt of the camera to 30 degrees .build(); // Creates a CameraPosition from the builder map.setBuildingsEnabled(true); map.setMyLocationEnabled(true); map.setMapType(GoogleMap.MAP_TYPE_NORMAL); map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); } } 

MAddress1 – это широта и долгота вашего местоположения.

Я проверил код ниже, и нет никаких проблем с картой на размер 200dp x 200dp

Планировка:

  <fragment android:id="@+id/map" class="com.google.android.gms.maps.SupportMapFragment" android:layout_width="200dp" android:layout_height="200dp" /> </LinearLayout> 

Фрагмент:

 public class LocationFragment extends Fragment { GoogleMap googleMap; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_location, container, false); googleMap = ((SupportMapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap(); MapsInitializer.initialize( getActivity().getApplicationContext() ); googleMap.addMarker(new MarkerOptions() .position( new LatLng( 38.7222524, -9.139336599999979) .title("MyLocation") .icon(BitmapDescriptorFactory .fromResource(R.drawable.ic_mobileedge_navpoint))); // Move the camera instantly with a zoom of 15. googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom( new LatLng( 38.7222524, -9.139336599999979), 15)); // Zoom in, animating the camera. googleMap.animateCamera(CameraUpdateFactory.zoomTo(12), 1000, null); return v; } } 

Я вижу, что вы используете MapView вместо MapFragment. В Google Maps V2 старый класс MapView com.google.android.maps.MapView устарел. Поэтому убедитесь, что вы используете правильный MapView как в коде Java, так и в XML-макете, который должен быть

 import com.google.android.gms.maps.MapView; 

а также

 <com.google.android.gms.maps.MapView android:id="@+id/map_view" android:layout_width="your_width" android:layout_height="your_height" /> 

Также убедитесь, что вы внесли все необходимые изменения в AndroidManifest.xml, который включает определение API_KEY для Maps V2, как описано здесь .

Помимо этого, важно, что вам нужно сделать, если вы используете MapView вместо MapFragment, вы должны явно вызвать переопределенные функции MapView внутри соответствующих переопределений деятельности, как, например,

 public class YourMapActivity extends Activity { MapView mMapView; GoogleMap mMap; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /* Your OnCreate with Map Initialization */ mMapView = (MapView) findViewById(R.id.map_view); mMapView.onCreate(Bundle.EMPTY); mMap = mMapView.getMap(); MapsInitializer.initialize(this); } @Override protected void onResume() { mMapView.onResume(); super.onResume(); } @Override protected void onPause() { mMapView.onPause(); super.onPause(); } @Override protected void onDestroy() { mMapView.onDestroy(); super.onDestroy(); } @Override public void onLowMemory() { mMapView.onLowMemory(); super.onLowMemory(); } } 

Этого должно быть достаточно для загрузки нестандартного размера MapView в вашей Acitivity. Вы также можете использовать следующие функции, чтобы соответствовать вашим требованиям.

 mMapView.setClickable(false); mMap.getUiSettings().setMyLocationButtonnabled(false); mMap.getUiSettings().setZoomControlsEnabled(false); mMap.getUiSettings().setCompassEnabled(false); mMap.getUiSettings().setZoomGesturesEnabled(false); mMap.getUiSettings().setScrollGesturesEnabled(false); mMap.setMyLocationEnabled(true);