Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用android地图创建具有自定义分辨率的纬度边界_Java_Android - Fatal编程技术网

Java 如何使用android地图创建具有自定义分辨率的纬度边界

Java 如何使用android地图创建具有自定义分辨率的纬度边界,java,android,Java,Android,我正在使用一个LatLngBounds.Builder类来创建基于两个位置的缩放级别,这很好,但是我需要创建一个屏幕一半的边界,因为我在布局中使用了底部工作表 这是绘制多段线并设置这两个位置之间边界的方法: 更新 我先打开底部 private void openBottom(){ if(latLngs != null){ if(bottomSheetBehavior.getState() != BottomSheetBehavior.STATE_EXPANDED){

我正在使用一个
LatLngBounds.Builder
类来创建基于两个位置的缩放级别,这很好,但是我需要创建一个屏幕一半的边界,因为我在布局中使用了底部工作表

这是绘制
多段线
并设置这两个位置之间边界的方法:

更新

我先打开底部

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);
    }
}
private void drawnNewRoute(){
如果(多段线==null){
po=新的多段线选项();
for(inti=0,tam=latLngs.size();i
这就是结果:

这就是我需要它的方式

:

下面的表单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

ArrayList<LatLng> latlang;
现在初始化这两个对象并添加fromLocationLatitude、FromLocationLength和toLocationLatitude、ToLocationLength

fromPosition = new LatLng(fromLocationLatitude, fromLocationLongitude);
toPosition = new LatLng(toLocationLatitude, toLocationLongitude);

latlang.add(fromPosition);
latlang.add(toPosition);
将这两个点添加到数组列表中后,只需将arraylist传递给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);
        }
    });
}
private void zoomtocollarlmarkersinmap(ArrayList latLngList)
{
LatLngBounds.Builder=新的LatLngBounds.Builder();
用于(LatLng标记:latLngList)
{
建造商。包括(标记);
}
LatLngBounds bounds=builder.build();
int=60;
最终CameraUpdate cu=CameraUpdateFactory.newLatLngBounds(边界、填充);
setonCamerachenglistener(新的googleMap.onCamerachenglistener(){
@凌驾
CameraChange上的公共无效(CameraPosition arg0){
谷歌地图。移动摄像机(cu);
谷歌地图。动画美人鱼(cu);
setonCamerachenglistener(null);
}
});
}

注意:setOnCameraChangeListener已被弃用,但它仍在7.0上运行,因此没有问题。

是否已修复底部白色区域?是的,300,如果在地图加载后更改,我将更新密钥,如“可见”,而不是“地图聚集”。我将发布答案。请查看我的答案。不起作用,代码几乎是一样的,但是对于不推荐使用的
setOnCameraChangeListener
首先展开底部工作表,然后尝试应用此代码。如果在展开工作表之前设置此代码,则它将永远无法工作。
fromPosition = new LatLng(fromLocationLatitude, fromLocationLongitude);
toPosition = new LatLng(toLocationLatitude, toLocationLongitude);

latlang.add(fromPosition);
latlang.add(toPosition);
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);
        }
    });
}