Draw not all the points in add route points mode

This commit is contained in:
PavelRatushny 2017-08-18 16:10:09 +03:00
parent faf5ad4411
commit f06f91df94

View file

@ -39,10 +39,13 @@ public class MeasurementToolLayer extends OsmandMapLayer implements ContextMenuL
private Paint bitmapPaint; private Paint bitmapPaint;
private final RenderingLineAttributes lineAttrs = new RenderingLineAttributes("measureDistanceLine"); private final RenderingLineAttributes lineAttrs = new RenderingLineAttributes("measureDistanceLine");
private final Path path = new Path(); private final Path path = new Path();
private int marginX; private int marginPointIconX;
private int marginY; private int marginPointIconY;
private int marginApplyingPointIconX;
private int marginApplyingPointIconY;
private final TIntArrayList tx = new TIntArrayList(); private final TIntArrayList tx = new TIntArrayList();
private final TIntArrayList ty = new TIntArrayList(); private final TIntArrayList ty = new TIntArrayList();
private final TIntArrayList drawnPointsPositions = new TIntArrayList();
private OnMeasureDistanceToCenter measureDistanceToCenterListener; private OnMeasureDistanceToCenter measureDistanceToCenterListener;
private OnSingleTapListener singleTapListener; private OnSingleTapListener singleTapListener;
private OnEnterMovePointModeListener enterMovePointModeListener; private OnEnterMovePointModeListener enterMovePointModeListener;
@ -64,8 +67,11 @@ public class MeasurementToolLayer extends OsmandMapLayer implements ContextMenuL
bitmapPaint.setDither(true); bitmapPaint.setDither(true);
bitmapPaint.setFilterBitmap(true); bitmapPaint.setFilterBitmap(true);
marginY = pointIcon.getHeight() / 2; marginPointIconY = pointIcon.getHeight() / 2;
marginX = pointIcon.getWidth() / 2; marginPointIconX = pointIcon.getWidth() / 2;
marginApplyingPointIconY = applyingPointIcon.getHeight() / 2;
marginApplyingPointIconX = applyingPointIcon.getWidth() / 2;
} }
void setOnSingleTapListener(OnSingleTapListener listener) { void setOnSingleTapListener(OnSingleTapListener listener) {
@ -195,7 +201,7 @@ public class MeasurementToolLayer extends OsmandMapLayer implements ContextMenuL
double lowestDistance = view.getResources().getDimension(R.dimen.measurement_tool_select_radius); double lowestDistance = view.getResources().getDimension(R.dimen.measurement_tool_select_radius);
for (int i = 0; i < measurementPoints.size(); i++) { for (int i = 0; i < measurementPoints.size(); i++) {
WptPt pt = measurementPoints.get(i); WptPt pt = measurementPoints.get(i);
if (tb.containsLatLon(pt.getLatitude(), pt.getLongitude())) { if (drawnPointsPositions.contains(i) && tb.containsLatLon(pt.getLatitude(), pt.getLongitude())) {
double xDiff = tb.getPixXFromLonNoRot(pt.getLongitude()) - x; double xDiff = tb.getPixXFromLonNoRot(pt.getLongitude()) - x;
double yDiff = tb.getPixYFromLatNoRot(pt.getLatitude()) - y; double yDiff = tb.getPixYFromLatNoRot(pt.getLatitude()) - y;
double distToPoint = Math.sqrt(Math.pow(xDiff, 2) + Math.pow(yDiff, 2)); double distToPoint = Math.sqrt(Math.pow(xDiff, 2) + Math.pow(yDiff, 2));
@ -223,6 +229,7 @@ public class MeasurementToolLayer extends OsmandMapLayer implements ContextMenuL
@Override @Override
public void onDraw(Canvas canvas, RotatedTileBox tb, DrawSettings settings) { public void onDraw(Canvas canvas, RotatedTileBox tb, DrawSettings settings) {
if (inMeasurementMode) { if (inMeasurementMode) {
drawnPointsPositions.clear();
lineAttrs.updatePaints(view, settings, tb); lineAttrs.updatePaints(view, settings, tb);
if (!inMovePointMode && !inAddPointAfterMode && !inAddPointBeforeMode) { if (!inMovePointMode && !inAddPointAfterMode && !inAddPointBeforeMode) {
drawCenterIcon(canvas, tb, tb.getCenterPixelPoint(), settings.isNightMode()); drawCenterIcon(canvas, tb, tb.getCenterPixelPoint(), settings.isNightMode());
@ -241,6 +248,24 @@ public class MeasurementToolLayer extends OsmandMapLayer implements ContextMenuL
path.reset(); path.reset();
tx.reset(); tx.reset();
ty.reset(); ty.reset();
int leftPointPos = -1;
for (int i = 0; i < measurementPoints.size(); i++) {
WptPt pt = measurementPoints.get(i);
if (tb.containsLatLon(pt.lat, pt.lon)) {
leftPointPos = i;
break;
}
}
int rightPointPos = -1;
for (int i = measurementPoints.size() - 1; i > leftPointPos; i--) {
WptPt pt = measurementPoints.get(i);
if (tb.containsLatLon(pt.lat, pt.lon)) {
rightPointPos = i;
break;
}
}
for (int i = 0; i < measurementPoints.size(); i++) { for (int i = 0; i < measurementPoints.size(); i++) {
WptPt pt = measurementPoints.get(i); WptPt pt = measurementPoints.get(i);
int locX; int locX;
@ -296,23 +321,34 @@ public class MeasurementToolLayer extends OsmandMapLayer implements ContextMenuL
calculatePath(tb, tx, ty, path); calculatePath(tb, tx, ty, path);
canvas.drawPath(path, lineAttrs.paint); canvas.drawPath(path, lineAttrs.paint);
WptPt pointToDrawOnTop = null; if (leftPointPos != -1 && rightPointPos != -1) {
for (int i = 0; i < measurementPoints.size(); i++) { int pointToDraw = rightPointPos - leftPointPos;
int step = 1;
if (pointToDraw > 50) {
step = pointToDraw / 50;
}
for (int i = leftPointPos; i <= rightPointPos; i += step) {
WptPt pt = measurementPoints.get(i); WptPt pt = measurementPoints.get(i);
if (inMovePointMode && i == selectedPointPos) { if (!(inMovePointMode && i == selectedPointPos)) {
pointToDrawOnTop = pt;
} else {
if (tb.containsLatLon(pt.lat, pt.lon)) {
int locX = tb.getPixXFromLonNoRot(pt.lon); int locX = tb.getPixXFromLonNoRot(pt.lon);
int locY = tb.getPixYFromLatNoRot(pt.lat); int locY = tb.getPixYFromLatNoRot(pt.lat);
canvas.drawBitmap(pointIcon, locX - marginX, locY - marginY, bitmapPaint); canvas.drawBitmap(pointIcon, locX - marginPointIconX, locY - marginPointIconY, bitmapPaint);
drawnPointsPositions.add(i);
} }
} }
} else if (leftPointPos != -1) {
WptPt pt = measurementPoints.get(leftPointPos);
if (!(inMovePointMode && leftPointPos == selectedPointPos)) {
int locX = tb.getPixXFromLonNoRot(pt.lon);
int locY = tb.getPixYFromLatNoRot(pt.lat);
canvas.drawBitmap(pointIcon, locX - marginPointIconX, locY - marginPointIconY, bitmapPaint);
drawnPointsPositions.add(leftPointPos);
} }
if (inAddPointAfterMode || inAddPointBeforeMode || pointToDrawOnTop != null) { }
if (inAddPointAfterMode || inAddPointBeforeMode || inMovePointMode) {
int locX = tb.getCenterPixelX(); int locX = tb.getCenterPixelX();
int locY = tb.getCenterPixelY(); int locY = tb.getCenterPixelY();
canvas.drawBitmap(applyingPointIcon, locX - marginX, locY - marginY, bitmapPaint); canvas.drawBitmap(applyingPointIcon, locX - marginApplyingPointIconX, locY - marginApplyingPointIconY, bitmapPaint);
} }
} }
} }