@MacKenlly

Как разместить на одном фрагменте GoogleMaps и ViewPager?

Добрый день, может кто сталкивался с данной проблемой.
Необходимо сделать в одном окне следующую картину:
1. Вверху карты(большая часть)
2. Внизу ближайшие точки( как в гугл картах), куда можно добраться на ViewPager.

Вот непосредственно код:
1. Главное окно.
public class MapFragment extends Fragment implements OnMapReadyCallback {

    private ClusterManager<MarkerMaps> mClusterManager;
    private GoogleMap mMap;
    private List<MarkerMaps> mMarkers;
    private LatLng mUserLocation;



    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        mMarkers = new ArrayList<>();
        UpdateUI();
        View view = inflater.inflate(R.layout.activity_maps_fragment, container, false);

        SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);

        Intent intent = MarkersPagerActivity.newIntent(getActivity(), mMarkers.get(1).getId());
        startActivityForResult(intent, 1);
        return view;
    }

    //обновление фрагмента
    private void UpdateUI() {
        MarkerLab markerLab = MarkerLab.get(getActivity());
        mMarkers = markerLab.getMarkers();
    }


    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
        mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
       // UpdateUI();
        if (ActivityCompat.checkSelfPermission(getContext(),
                android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
                ActivityCompat.checkSelfPermission(getContext(),
                        android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(getActivity(),
                    new String[]{android.Manifest.permission.ACCESS_COARSE_LOCATION,
                            android.Manifest.permission.ACCESS_FINE_LOCATION},
                    1);
        } else {
            Log.e("DB", "PERMISSION GRANTED");
        }

        mMap.setMyLocationEnabled(true);
        LocationManager lm = (LocationManager) getContext().getSystemService(Context.LOCATION_SERVICE);
        Location myLocation = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
        if (myLocation == null) {
            Criteria criteria = new Criteria();
            criteria.setAccuracy(Criteria.ACCURACY_COARSE);
            String provider = lm.getBestProvider(criteria, true);
            myLocation = lm.getLastKnownLocation(provider);
        }
        LatLng userLocation = null;
        if (myLocation != null) {
            Log.w("Нам Пиздец", "Это точно");
            userLocation = new LatLng(myLocation.getLatitude(), myLocation.getLongitude());
            mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(userLocation, 14), 1500, null);
        }
        mUserLocation = new LatLng(myLocation.getLatitude(), myLocation.getLongitude());
        setUpClusterer();
    }

    public static double CalculationDistance(LatLng StartP, LatLng EndP) {
        double distance = CalculationDistanceByCoord(StartP.latitude, StartP.longitude, EndP.latitude, EndP.longitude);
        Log.w("Distance", String.valueOf(distance));
        return distance;
    }

    private static double CalculationDistanceByCoord(double startPointLat,double startPointLon,double endPointLat,double endPointLon){
        float[] results = new float[1];
        Location.distanceBetween(startPointLat, startPointLon, endPointLat, endPointLon, results);
        return results[0];
    }

    private void setUpClusterer() {
        mClusterManager = new ClusterManager<MarkerMaps>(getContext(), mMap);
        MarkerRenderer customRenderer = new MarkerRenderer(getActivity(), mClusterManager, mMap);
        mClusterManager.setRenderer(customRenderer);


        mMap.setOnCameraIdleListener(mClusterManager);
        mMap.setOnMarkerClickListener(mClusterManager);
        addItems();
        mClusterManager.cluster();
    }

    private void addItems() {
        for(MarkerMaps marker : mMarkers) {
            LatLng place = marker.getPosition();
            if (CalculationDistance(place, mUserLocation) < 2000) {
                mClusterManager.addItem(marker);
            }
        }
    }
}


2. PagerActivity.
public class MarkersPagerActivity extends FragmentActivity {
    private static final String EXTRA_MARKER_ID =
            "com.bokoch.android.SportApp.Maps.marker_id";
    private ViewPager mViewPager;
    private List<MarkerMaps> mMarkers;
    public static Intent newIntent(Context packageContext, int markerId) {
        Intent intent = new Intent(packageContext, MarkersPagerActivity.class);
        intent.putExtra(EXTRA_MARKER_ID, markerId);
        return intent;
    }
   
    @Override
    protected void onCreate(Bundle savedInstaceState) {
        super.onCreate(savedInstaceState);
        setContentView(R.layout.activity_maps_fragment);
        int mMarkerId = (int) getIntent().getSerializableExtra(EXTRA_MARKER_ID);

        mViewPager = findViewById(R.id.marker_view_pager);
        mMarkers = MarkerLab.get(this).getMarkers();
        FragmentManager fragmentManager = getSupportFragmentManager();
        
        mViewPager.setAdapter(new FragmentStatePagerAdapter(fragmentManager) {
            @Override
            public Fragment getItem(int position) {
                MarkerMaps markerMaps = mMarkers.get(position);
                return MarkerFragment.newInstance(markerMaps.getId());
            }

            @Override
            public int getCount() {
                return mMarkers.size();
            }
        });
        for (int i = 0; i < mMarkers.size(); i++) {
            if (mMarkers.get(i).getId() == mMarkerId) {
                mViewPager.setCurrentItem(i);
                break;
            }
        }
    }

}

Заранее, спасибо)
  • Вопрос задан
  • 35 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы