Добрый день, может кто сталкивался с данной проблемой.
Необходимо сделать в одном окне следующую картину:
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;
}
}
}
}
Заранее, спасибо)