Center to user position

This commit is contained in:
Daniele Verducci (Slimpenguin) 2024-02-23 08:23:23 +01:00
parent 0e8f9e2dfa
commit 7b26938efb
2 changed files with 34 additions and 4 deletions

View File

@ -31,6 +31,7 @@ import java.util.List;
import java.util.Set;
import it.danieleverducci.nextcloudmaps.R;
import it.danieleverducci.nextcloudmaps.activity.detail.GeofavoriteDetailActivity;
import it.danieleverducci.nextcloudmaps.activity.main.MainActivity;
import it.danieleverducci.nextcloudmaps.model.Geofavorite;
import it.danieleverducci.nextcloudmaps.utils.MapUtils;
@ -40,6 +41,7 @@ import it.danieleverducci.nextcloudmaps.views.GeofavMarkerInfoWindow;
public class GeofavoriteMapFragment extends GeofavoritesFragment implements MainActivity.OnGpsPermissionGrantedListener {
private MapView map;
private MyLocationNewOverlay mLocationOverlay;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
@ -53,6 +55,9 @@ public class GeofavoriteMapFragment extends GeofavoritesFragment implements Main
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_geofavorite_map, container, false);
// Register listeners
v.findViewById(R.id.center_position).setOnClickListener((cpv) -> moveToUserPosition());
// Setup map
map = v.findViewById(R.id.map);
map.getZoomController().setVisibility(CustomZoomButtonsController.Visibility.NEVER);
@ -147,19 +152,30 @@ public class GeofavoriteMapFragment extends GeofavoritesFragment implements Main
return;
}
MyLocationNewOverlay mLocationOverlay = new MyLocationNewOverlay(new GpsMyLocationProvider(requireContext()), map);
// Display user position on screen
mLocationOverlay = new MyLocationNewOverlay(new GpsMyLocationProvider(requireContext()), map);
// On first gps fix, show "center to my position" icon
mLocationOverlay.runOnFirstFix(() -> {
if(getActivity() != null) {
getActivity().runOnUiThread(() -> {
getView().findViewById(R.id.center_position).setVisibility(View.VISIBLE);
});
}
});
mLocationOverlay.enableMyLocation();
mLocationOverlay.runOnFirstFix(() -> requireActivity().runOnUiThread(() -> map.getController().animateTo(mLocationOverlay.getMyLocation())));
map.getOverlays().add(mLocationOverlay);
}
void moveToUserPosition() {
if (mLocationOverlay != null)
map.getController().animateTo(mLocationOverlay.getMyLocation());
}
private void addMarker(Geofavorite geofavorite){
GeoPoint pos = new GeoPoint(geofavorite.getLat(), geofavorite.getLng());
// Set icon and color
Drawable icon = DrawableCompat.wrap(AppCompatResources.getDrawable(requireContext(), R.drawable.ic_list_pin));
Drawable icon = DrawableCompat.wrap(AppCompatResources.getDrawable(requireContext(), R.drawable.ic_map_pin));
DrawableCompat.setTint(icon, geofavorite.categoryColor() == 0 ? requireContext().getColor(R.color.defaultBrand) : geofavorite.categoryColor());
// Set infowindow (popup opened on marker click) and its listeners

View File

@ -53,4 +53,18 @@
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/center_position"
android:layout_width="@dimen/floating_bar_height"
android:layout_height="@dimen/floating_bar_height"
android:layout_marginRight="100dp"
android:layout_marginBottom="25dp"
android:layout_gravity="bottom|right"
android:background="@drawable/unselected_floating_semitransparent_button_background"
android:contentDescription="@string/list_mode"
android:padding="5dp"
android:tint="@color/text_color"
android:src="@drawable/ic_add_gps"
android:visibility="gone"/>
</FrameLayout>