From 6cfc02979f1c5946bd26760ce8c50ad95c6707fb Mon Sep 17 00:00:00 2001 From: cepprice Date: Sun, 4 Apr 2021 03:22:09 +0500 Subject: [PATCH] Remove border overlapping when zooming gradient track --- .../src/net/osmand/plus/views/Renderable.java | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/views/Renderable.java b/OsmAnd/src/net/osmand/plus/views/Renderable.java index 27d741d964..657cf3856a 100644 --- a/OsmAnd/src/net/osmand/plus/views/Renderable.java +++ b/OsmAnd/src/net/osmand/plus/views/Renderable.java @@ -61,6 +61,7 @@ public class Renderable { public List points = null; // Original list of points protected List culled = new ArrayList<>(); // Reduced/resampled list of points + protected List oldCulled = new ArrayList<>(); protected int pointSize; protected double segmentSize; @@ -116,7 +117,7 @@ public class Renderable { updateLocalPaint(p); canvas.rotate(-tileBox.getRotate(), tileBox.getCenterPixelX(), tileBox.getCenterPixelY()); if (scaleType != null) { - drawGradient(getPointsForDrawing(), p, canvas, tileBox); + drawGradient(getPointsForDrawingWithBorder(), p, canvas, tileBox); } else { drawSolid(getPointsForDrawing(), p, canvas, tileBox); } @@ -126,6 +127,9 @@ public class Renderable { public void drawSegment(double zoom, Paint p, Canvas canvas, RotatedTileBox tileBox) { if (QuadRect.trivialOverlap(tileBox.getLatLonBounds(), trackBounds)) { // is visible? + if (tileBox.getZoomAnimation() > 0 && !Algorithms.isEmpty(culled) && scaleType != null) { + oldCulled = new ArrayList<>(culled); + } startCuller(zoom); drawSingleSegment(zoom, p, canvas, tileBox); } @@ -139,6 +143,16 @@ public class Renderable { return culled.isEmpty() ? points : culled; } + public List getPointsForDrawingWithBorder() { + if (!culled.isEmpty()) { + return culled; + } else if (!oldCulled.isEmpty()) { + return oldCulled; + } else { + return points; + } + } + public void drawGeometry(Canvas canvas, RotatedTileBox tileBox, QuadRect quadRect, int arrowColor, int trackColor, float trackWidth) { if (geometryWay != null) { List points = getPointsForDrawing(); @@ -290,7 +304,8 @@ public class Renderable { super(pt, 0); } - @Override public void drawSegment(double zoom, Paint p, Canvas canvas, RotatedTileBox tileBox) { + @Override + public void drawSegment(double zoom, Paint p, Canvas canvas, RotatedTileBox tileBox) { if (points.size() != pointSize) { int prevSize = pointSize; pointSize = points.size();