gpt4 book ai didi

java - 如何使用 Android map 创建具有自定义分辨率的纬度范围

转载 作者:行者123 更新时间:2023-12-02 12:51:12 26 4
gpt4 key购买 nike

我正在使用 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);
}
}

这就是结果:

enter image description here

这就是我需要的

:enter image description here

底表 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com