Làm cách nào để đặt vị trí mặc định và mức thu phóng cho google map api v2?


91

Khi bản đồ của tôi hiển thị, nó luôn bắt đầu ở một vị trí cố định (gần Châu Phi).

Sau đó, tôi sử dụng đoạn mã sau để căn giữa bản đồ đến vị trí tôi muốn.

mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(loc.getLatitude(), loc.getLongitude()), 14.0f));

Câu hỏi của tôi là tôi có thể đặt vị trí mặc định và mức thu phóng trước khi bản đồ hiển thị không?

Bởi vì tôi không muốn người dùng của mình nhìn thấy hoạt ảnh lúc đầu.

Cảm ơn.


Quá trình này đã giúp .... Ngay cả khi vị trí không được kích hoạt ... animateCamera chỉ đến một nơi nào đó ở Châu Phi ... wiered! ... moveCameralà giải pháp tốt nhất cho việc này
Devrath

3
hahahhaha ....... + 1 cho câu hỏi này, bạn đã hỏi trái tim tôi. : D ... "nó luôn bắt đầu ở một địa điểm cố định (gần Châu Phi)" ........ rofll ..... mặc dù cảm ơn.
akash89

2
@ akash89 Nó bắt đầu từ LatLng (0.0,0.0) như mong đợi: google.com/maps/@0,0,5z Tôi không chắc điều gì khiến bạn lăn trên sàn cười theo đúng nghĩa đen (nếu tôi không nhầm), nhưng Tôi rất vui vì bạn đang hạnh phúc :)
Navid Vafaei

Câu trả lời:


175

bạn có thể sử dụng điều này để thu phóng trực tiếp mà không cần hoạt ảnh:

map.moveCamera( CameraUpdateFactory.newLatLngZoom(new LatLng(xxxx,xxxx) , 14.0f) );

Xin cảm ơn, nó chỉ là những gì tôi cần:)
dong221

tôi có vĩ độ / kinh độ tối thiểu và vĩ độ / kinh độ tối đa thì làm thế nào để đặt ???
Pratik Butani,

bạn có thể thêm câu hỏi mới cho câu hỏi đó để tôi có thể đăng câu trả lời đầy đủ cho bạn, nhưng tóm lại, bạn sẽ phải sử dụng LatLngBounds.Builder để xây dựng giới hạn và sử dụng câu trả lời đó.
Moh Sakkijha,

1
@Saksak Vấn đề của tôi là tôi đang chờ lấy GPS để MyLocationtôi có thể di chuyển và thu phóng bản đồ đến vị trí của người dùng. Vì bản đồ được khởi tạo trong XML, tôi không thể tìm ra cách để giữ cho bước nhảy không xảy ra. Lý tưởng nhất, tôi sẽ ẩn bản đồ cho đến khi MyLocationđược tìm thấy sau đó hiển thị nó.
theblang

khi tôi đặt bản đồ, nó đã báo cho tôi một lỗi và yêu cầu tôi tạo một 'bản đồ' biến. là nó có thể nhập khẩu hoặc cái gì đó?
Hanzawa Naoki

86

Hãy xem tài liệu tại đây:

https://developers.google.com/maps/documentation/android-api/map#configure_initial_state

Cách thực hiện hơi khác một chút tùy thuộc vào việc bạn thêm bản đồ qua XML hay theo chương trình. Nếu bạn đang sử dụng XML, bạn có thể thực hiện như sau:

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:map="http://schemas.android.com/apk/res-auto"
  android:id="@+id/map"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  class="com.google.android.gms.maps.SupportMapFragment"
  map:cameraBearing="112.5"
  map:cameraTargetLat="-33.796923"
  map:cameraTargetLng="150.922433"
  map:cameraTilt="30"
  map:cameraZoom="13"/>

Nếu bạn đang làm điều đó theo chương trình, bạn có thể làm như sau:

CameraPosition cameraPosition = new CameraPosition.Builder()
    .target(new LatLng(-33, 150))
    .zoom(13)
    .build();
MapFragment.newInstance(new GoogleMapOptions()
    .camera(camera));

1
Câu trả lời tốt. Trên thực tế, cái này phù hợp hơn cho câu hỏi này.
MightySeal

2
trong xml tôi nhận được lỗi lintUnexpected namespace prefix "map" found for tag fragment
Muhammad Babar

Nếu ngay cả với xmlns: map = "schemas.android.com/apk/res-auto" bạn vẫn gặp lỗi tương tự. Cố gắng thêm xmlns này: tools = " schemas.android.com/tools " và sử dụng "tools:" thay vì "map:"
Guillaume Ilitch Tchaïkovsky

Liên kết đến tài liệu có tất cả các tùy chọn: Develop.google.com/maps/documentation/android-sdk/…
Albert Vila Calvo

đang tìm kiếm các thuộc tính bố cục, hoạt động hoàn hảo. cảm ơn
Abhishek Garg

5

Chỉ trong trường hợp bạn muốn tải Google Mapbất kỳ lúc nào theo Locationlập trình ban đầu thì bạn có thể sử dụng đoạn mã này,

FragmentManager fm = getFragmentManager(); // getChildFragmentManager inside fragments.
CameraPosition cp = new CameraPosition.Builder()
                    .target(initialLatLng) // your initial co-ordinates here. like, LatLng initialLatLng
                    .zoom(zoom_level)
                    .build();
SupportMapFragment mapFragment = SupportMapFragment.newInstance(new GoogleMapOptions().camera(cp));
fm.beginTransaction().replace(R.id.rl_map, mapFragment).commit();

Thêm đoạn mã này cho layout

<RelativeLayout
       android:id="@+id/rl_map"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent" />

Điều này sẽ tải trực tiếp GoogleMapcụ thể Location, tức là, initialLatLng.


3

Tôi đã tạo một tay cầm SupportMapFragmentvà đặt nó visibilityđể View.INVISIBLEsử dụng SupportMapFragment.getView().setVisibility(). Sau đó, trong lệnh onLocationChangedgọi lại mà lớp của tôi thực hiện, tôi kiểm tra nếu INVISIBLEvà đặt thành VISIBLEnếu đúng. Điều này giúp loại bỏ hiện tượng nhảy bạn thấy khi tải trong khi cho phép bạn khởi tạo động vị trí bắt đầu. Trong trường hợp của tôi, tôi đang căn giữa máy ảnh xung quanh vị trí của người dùng, vì vậy onLocationChangedđược gọi là ngay lập tức vì setMyLocationEnabled(true).

Các yêu cầu của bạn có thể khác nhau, nhưng bạn chỉ cần đặt chế độ hiển thị INVISIBLEvà sau đó tìm một nơi tốt để đặt VISIBLEsau khi dữ liệu thích hợp của bạn đã được tải.


2

bạn có thể sử dụng CameraUpdate trực tiếp bằng cách sử dụng độ dài tĩnh

 LatLong latlong = new LatLong(lat, long);
 CameraUpdate cameraPosition = CameraUpdateFactory.newLatLngZoom(latLong, 15);
                mGoogleMap.moveCamera(cameraPosition);
                mGoogleMap.animateCamera(cameraPosition);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.