Move map to fit gpx in track appearance screen

This commit is contained in:
Vitaliy 2020-07-24 19:01:22 +03:00
parent ae850bde77
commit d8de7a25db
4 changed files with 50 additions and 8 deletions

View file

@ -90,6 +90,10 @@
</net.osmand.plus.mapcontextmenu.InterceptorLinearLayout>
<include
layout="@layout/map_hud_controls"
tools:visibility="invisible" />
<LinearLayout
android:id="@+id/control_buttons"
android:layout_width="match_parent"
@ -112,8 +116,4 @@
</LinearLayout>
<include
layout="@layout/map_hud_controls"
tools:visibility="invisible" />
</FrameLayout>

View file

@ -1244,6 +1244,8 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
mapRouteInfoMenu.updateMenu();
MapRouteInfoMenu.showLocationOnMap(this, latLonToShow.getLatitude(), latLonToShow.getLongitude());
} else if (toShow instanceof GPXFile) {
hideContextAndRouteInfoMenues();
Bundle args = new Bundle();
args.putString(TRACK_FILE_PATH, ((GPXFile) toShow).path);
args.putInt(ContextMenuFragment.MENU_STATE_KEY, MenuController.MenuState.HALF_SCREEN);

View file

@ -54,12 +54,12 @@ import net.osmand.plus.R;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.activities.TrackActivity;
import net.osmand.plus.measurementtool.NewGpxData;
import net.osmand.plus.track.SplitIntervalCard;
import net.osmand.plus.track.SplitTrackAsyncTask;
import net.osmand.plus.track.SplitTrackAsyncTask.SplitTrackListener;
import net.osmand.plus.myplaces.TrackBitmapDrawer.TrackBitmapDrawerListener;
import net.osmand.plus.settings.backend.OsmandSettings;
import net.osmand.plus.track.GpxSplitType;
import net.osmand.plus.track.SplitIntervalCard;
import net.osmand.plus.track.SplitTrackAsyncTask;
import net.osmand.plus.track.SplitTrackAsyncTask.SplitTrackListener;
import net.osmand.plus.widgets.tools.CropCircleTransformation;
import net.osmand.plus.wikipedia.WikiArticleHelper;
import net.osmand.plus.wikivoyage.WikivoyageUtils;
@ -363,7 +363,7 @@ public class TrackActivityFragmentAdapter implements TrackBitmapDrawerListener {
}
}
private void showTemporaryObjectOnMap(Object toShow){
private void showTemporaryObjectOnMap(Object toShow) {
TrackActivity activity = getTrackActivity();
GpxDataItem gpxDataItem = getGpxDataItem();
GPXFile gpx = getGpx();

View file

@ -17,6 +17,7 @@ import android.widget.LinearLayout;
import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.ActivityCompat;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
@ -25,6 +26,8 @@ import net.osmand.AndroidUtils;
import net.osmand.GPXUtilities.GPXFile;
import net.osmand.Location;
import net.osmand.PlatformUtil;
import net.osmand.data.QuadRect;
import net.osmand.data.RotatedTileBox;
import net.osmand.plus.GPXDatabase.GpxDataItem;
import net.osmand.plus.GpxSelectionHelper.GpxDisplayGroup;
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
@ -226,6 +229,12 @@ public class TrackAppearanceFragment extends ContextMenuFragment implements Card
}
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
adjustMapPosition(getHeight());
}
@Override
public void onDestroyView() {
super.onDestroyView();
@ -315,6 +324,15 @@ public class TrackAppearanceFragment extends ContextMenuFragment implements Card
}
@Override
protected int applyPosY(int currentY, boolean needCloseMenu, boolean needMapAdjust, int previousMenuState, int newMenuState, int dZoom, boolean animated) {
int y = super.applyPosY(currentY, needCloseMenu, needMapAdjust, previousMenuState, newMenuState, dZoom, animated);
if (needMapAdjust) {
adjustMapPosition(y);
}
return y;
}
private void buildZoomButtons(@NonNull View view) {
OsmandApplication app = requireMyApplication();
this.zoomButtonsView = view.findViewById(R.id.map_hud_controls);
@ -444,6 +462,28 @@ public class TrackAppearanceFragment extends ContextMenuFragment implements Card
appearanceIcon.setImageDrawable(icon);
}
private void adjustMapPosition(int y) {
MapActivity mapActivity = getMapActivity();
if (mapActivity != null && mapActivity.getMapView() != null) {
GPXFile gpxFile = selectedGpxFile.getGpxFile();
QuadRect r = gpxFile.getRect();
RotatedTileBox tb = mapActivity.getMapView().getCurrentRotatedTileBox().copy();
int tileBoxWidthPx = 0;
int tileBoxHeightPx = 0;
if (!isPortrait()) {
tileBoxWidthPx = tb.getPixWidth() - getWidth();
} else {
int fHeight = getViewHeight() - y - AndroidUtils.getStatusBarHeight(mapActivity);
tileBoxHeightPx = tb.getPixHeight() - fHeight;
}
if (r.left != 0 && r.right != 0) {
mapActivity.getMapView().fitRectToMap(r.left, r.right, r.top, r.bottom, tileBoxWidthPx, tileBoxHeightPx, 0);
}
}
}
public Drawable getTrackIcon(OsmandApplication app, String widthAttr, boolean showArrows, @ColorInt int color) {
int widthIconId = getWidthIconId(widthAttr);
Drawable widthIcon = app.getUIUtilities().getPaintedIcon(widthIconId, color);