基于seekbar重新计算googleMap边界

ogq8wdun  于 2021-06-29  发布在  Java
关注(0)|答案(0)|浏览(196)

我创建了一个使用 Maps SDK for Android .
当活动第一次初始化时,我计算一些初始圆边界,然后移动相机,使整个圆都在边界内。我使用以下代码加载它:

@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;

    geoFire.getLocation( UID, new com.firebase.geofire.LocationCallback() {
        @Override
        public void onLocationResult(String key, GeoLocation location) {
            if (location != null) {

                currLat = location.latitude;
                currLon = location.longitude;

                LatLng myLocation = new LatLng( currLat, currLon );

                circle = mMap.addCircle( new CircleOptions()
                        .center( myLocation )
                        .radius( AppConstants.INITIAL_RADIUS )
                        .strokeWidth( 0 )
                        .fillColor( getResources().getColor( R.color.colorLightPurpleOpac ) ) );

                mMap.getUiSettings().setMapToolbarEnabled( false );
                mMap.getUiSettings().setTiltGesturesEnabled( false );
                mMap.getUiSettings().setRotateGesturesEnabled( false );
                mMap.addMarker( new MarkerOptions().position( myLocation ).title( "I'm here" ) );

                mMap.moveCamera( CameraUpdateFactory.newLatLngZoom( circleBounds( myLocation, (double) AppConstants.INITIAL_RADIUS / 1000 ).getCenter(), 10 ) );
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    } );
}

private LatLngBounds circleBounds(LatLng center, double radius) {
    double deltaLat = Math.toDegrees( radius / AppConstants.EARTH_RADIUS );
    double deltaLng = Math.toDegrees( radius / AppConstants.EARTH_RADIUS / Math.cos( Math.toRadians( center.latitude ) ) );
    return new LatLngBounds( new LatLng( center.latitude - deltaLat, center.longitude - deltaLng ), new LatLng( center.latitude + deltaLat, center.longitude + deltaLng ) );
}

现在,在同样的活动中,有一个 seekBar . 目的 seekBar 是更改绘制的圆的半径。
我使用以下方法更新Map中的圆:

SeekBar.OnSeekBarChangeListener seekBarChangeListener = new SeekBar.OnSeekBarChangeListener() {

    @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {

    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {

        int progress = seekBar.getProgress();

        circle.remove();
        circle = mMap.addCircle( new CircleOptions()
                .center( new LatLng( currLat, currLon ) )
                .radius( progress * 1000 )
                .strokeWidth( 0 )
                .fillColor( getResources().getColor( R.color.colorLightPurpleOpac ) ) );

        mapFragment.getMapAsync( googleMap -> mMap.moveCamera( CameraUpdateFactory.newLatLngZoom( circleBounds( new LatLng( currLat, currLon ), (double) progress ).getCenter(), 10 ) ) );

    }
};

现在所发生的是,新的圆被正确绘制,它改变了它的尺寸,但是Map不会改变它的边界来适应新的圆。
有什么方法可以“更新”缩放以适应新的圆吗?
谢谢您

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题