我正在使用 LatLngBounds.Builder
类来创建基于两个位置的缩放级别,效果很好,但我需要创建一个与一半屏幕的边界,因为我正在使用带有布局的底页。
这是绘制折线
并设置这两个位置之间的边界的方法:
Update!
我先打开底部!
private void openBottom(){
if(latLngs != null){
if(bottomSheetBehavior.getState() != BottomSheetBehavior.STATE_EXPANDED){
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
}
drawnNewRoute();
}
}
然后,绘制边界:
private void drawnNewRoute() {
if(polyline == null){
po = new PolylineOptions();
for(int i = 0, tam = latLngs.size(); i < tam; i++){
po.add(latLngs.get(i));
}
String data = new Gson().toJson(latLngs);
po.color(Color.BLACK).width(10);
polyline = mMap.addPolyline(po);
ArrayList<LatLng> latlang = new ArrayList<>();
latlang.add(latLngs.get(0));
latlang.add(latLngs.get(latLngs.size() -1));
mMarkerNewPosition = mMap.addMarker(new MarkerOptions().position(finalLocaltion).title(finalLocationName));
mMarkerNewPosition.showInfoWindow();
location_display_incl.setVisibility(View.GONE);
stopLocation();
InitialAddressTxt.setText(InitialAddress);
double finalLat = latLngs.get(latLngs.size() -1).latitude;
double finalLong = latLngs.get(latLngs.size() -1).longitude;
try {
ADRS = getAddress(finalLat,finalLong);
} catch (IOException e) {
e.printStackTrace();
}
FinalAddressTxt.setText(finalLocationName);
String finalComp = ADRS.getLocality() + "," + address.getAdminArea();
FinalComplement.setText(finalComp);
zoomToCoverAllMarkersInMap(latlang);
}
else{
polyline.setPoints(latLngs);
}
}
这就是结果:
这就是我需要的
底表 XML:
<android.support.v4.widget.NestedScrollView
app:layout_behavior="@string/bottom_sheet_behavior"
android:id="@+id/bottomSheet"
android:background="@android:color/white"
android:layout_width="match_parent"
android:layout_height="300dp">
最佳答案
这是您问题的解决方案。
声明 LatLng 的数组列表。
ArrayList<LatLng> latlang;
现在初始化数组列表。
latlang = new ArrayList<LatLng>();
现在,将 fromPostion 和 toPosition 添加到 arraylist 中。在全局添加 Declare fromPosition 和 toPosition 对象之前,我们可以随时使用它。
LatLng fromPosition;
LatLng toPosition;
现在初始化这两个对象并添加 fromLocationLatitude、fromLocationLongitude 和 toLocationLatitude、toLocationLongitude。
fromPosition = new LatLng(fromLocationLatitude, fromLocationLongitude);
toPosition = new LatLng(toLocationLatitude, toLocationLongitude);
latlang.add(fromPosition);
latlang.add(toPosition);
将两个点添加到数组列表中后,只需将数组列表传递给 ZoomToCoverAllMarkersInMap() 这个函数即可完成。
private void zoomToCoverAllMarkersInMap(ArrayList<LatLng> latLngList)
{
LatLngBounds.Builder builder = new LatLngBounds.Builder();
for (LatLng marker : latLngList)
{
builder.include(marker);
}
LatLngBounds bounds = builder.build();
int padding = 60;
final CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, padding);
googleMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition arg0) {
googleMap.moveCamera(cu);
googleMap.animateCamera(cu);
googleMap.setOnCameraChangeListener(null);
}
});
}
注意:setOnCameraChangeListener 已弃用,但它仍然可以在 7.0 上运行,因此没有问题。
关于java - 如何使用 Android map 创建具有自定义分辨率的纬度范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44603853/