Update turn icons

This commit is contained in:
Victor Shcherb 2011-12-08 00:46:43 +01:00
parent 1c8d3d54e3
commit c6c39bc8d2
3 changed files with 57 additions and 32 deletions

View file

@ -441,10 +441,7 @@ public class MapInfoLayer extends OsmandMapLayer {
invalidate(); invalidate();
} }
} else if (!Algoritms.objectEquals(turnType, next.turnType)) { } else if (!Algoritms.objectEquals(turnType, next.turnType)) {
// TODO
// if(turnType == null) {
turnType = next.turnType; turnType = next.turnType;
// }
TurnPathHelper.calcTurnPath(pathForTurn, turnType, pathTransform); TurnPathHelper.calcTurnPath(pathForTurn, turnType, pathTransform);
if (turnType.getExitOut() > 0) { if (turnType.getExitOut() > 0) {
exitOut = turnType.getExitOut() + ""; //$NON-NLS-1$ exitOut = turnType.getExitOut() + ""; //$NON-NLS-1$
@ -464,17 +461,21 @@ public class MapInfoLayer extends OsmandMapLayer {
} }
}; };
nextTurnInfo.setOnClickListener(new View.OnClickListener() { nextTurnInfo.setOnClickListener(new View.OnClickListener() {
int i = 0; // int i = 0;
@Override @Override
public void onClick(View v) { public void onClick(View v) {
// for test rendering purposes
// final int l = TurnType.predefinedTypes.length;
// final int exits = 5;
// i++; // i++;
// if (i % (TurnType.predefinedTypes.length + 1) == TurnType.predefinedTypes.length ) { // if (i % (l + exits) >= l ) {
// nextTurnInfo.turnType = TurnType.valueOf("EXIT4"); // nextTurnInfo.turnType = TurnType.valueOf("EXIT" + (i % (l + exits) - l + 1));
// float a = 180 - (i % (l + exits) - l + 1) * 50;
// nextTurnInfo.turnType.setTurnAngle(a < 0 ? a + 360 : a);
// } else { // } else {
// nextTurnInfo.turnType = TurnType.valueOf(TurnType.predefinedTypes[i % (TurnType.predefinedTypes.length + 1)]); // nextTurnInfo.turnType = TurnType.valueOf(TurnType.predefinedTypes[i % (TurnType.predefinedTypes.length + exits)]);
// } // }
// nextTurnInfo.invalidate(); nextTurnInfo.invalidate();
// TODO
showMiniMap = true; showMiniMap = true;
view.refreshMap(); view.refreshMap();
} }

View file

@ -64,8 +64,8 @@ public class NextTurnInfoControl extends MapInfoControl {
canvas.drawPath(pathForTurn, paintRouteDirection); canvas.drawPath(pathForTurn, paintRouteDirection);
canvas.drawPath(pathForTurn, paintBlack); canvas.drawPath(pathForTurn, paintBlack);
if (exitOut != null) { if (exitOut != null) {
drawShadowText(canvas, exitOut, (getWWidth()) / 2 - 6 * scaleCoefficient, drawShadowText(canvas, exitOut, (getWWidth()) / 2 - 7 * scaleCoefficient,
getWHeight() / 2 - textPaint.getTextSize() / 2, textPaint); getWHeight() / 2 - textPaint.getTextSize() / 2 + 3 * scaleCoefficient, textPaint);
} }
String text = OsmAndFormatter.getFormattedDistance(nextTurnDirection, getContext()); String text = OsmAndFormatter.getFormattedDistance(nextTurnDirection, getContext());
String subtext = null; String subtext = null;

View file

@ -15,8 +15,7 @@ import android.util.FloatMath;
public class TurnPathHelper { public class TurnPathHelper {
// draw path 96x96 // 72x72
// 64x64
public static void calcTurnPath(Path pathForTurn, TurnType turnType, Matrix transform) { public static void calcTurnPath(Path pathForTurn, TurnType turnType, Matrix transform) {
if(turnType == null){ if(turnType == null){
return; return;
@ -33,7 +32,7 @@ public class TurnPathHelper {
float hpartArrowL = (float) (harrowL - th) / 2; float hpartArrowL = (float) (harrowL - th) / 2;
if (TurnType.C.equals(turnType.getValue())) { if (TurnType.C.equals(turnType.getValue())) {
int h = (int) (ha - hpartArrowL - 18); int h = (int) (ha - hpartArrowL - 16);
pathForTurn.rMoveTo(th / 2, 0); pathForTurn.rMoveTo(th / 2, 0);
pathForTurn.rLineTo(0, -h); pathForTurn.rLineTo(0, -h);
pathForTurn.rLineTo(hpartArrowL, 0); pathForTurn.rLineTo(hpartArrowL, 0);
@ -131,27 +130,52 @@ public class TurnPathHelper {
if (sweepAngle < -360) { if (sweepAngle < -360) {
sweepAngle += 360; sweepAngle += 360;
} }
float r1 = ha / 3f;
float r2 = 18f;
float angleToRot = 0.3f;
pathForTurn.moveTo(48, 48 + r1 + 8); float r1 = ha / 3f - 1;
pathForTurn.lineTo(48, 48 + r1); float r2 = r1 - 9;
RectF r = new RectF(48 - r1, 48 - r1, 48 + r1, 48 + r1); float angleToRot = 0.3f;
pathForTurn.arcTo(r, 90, sweepAngle); int cx = wa / 2 ;
int cy = ha / 2 - 2;
pathForTurn.moveTo(cx, ha - 1);
pathForTurn.lineTo(cx, cy + r1);
RectF r = new RectF(cx - r1, cy - r1, cx + r1, cy + r1);
int out = turnType.getExitOut();
if (out < 1) {
out = 1;
}
float prev = 90;
float init = 90;
float step = sweepAngle / out;
for (int i = 1; i <= out; i++) {
float to = step * i;
if (i == out) {
pathForTurn.arcTo(r, prev, to - prev + init);
} else {
float tsRad = (float) ((to - step / 8 + 180) * Math.PI / 180f);
float tsRad2 = (float) ((to + step / 8 + 180) * Math.PI / 180f);
pathForTurn.arcTo(r, prev, to - step / 6 - prev + init );
pathForTurn.lineTo(cx + (r1 + 10) * FloatMath.sin(tsRad), cy - (r1 + 10) * FloatMath.cos(tsRad));
pathForTurn.lineTo(cx + (r1 + 10) * FloatMath.sin(tsRad2), cy - (r1 + 10) * FloatMath.cos(tsRad2));
// not necessary for next arcTo
//pathForTurn.lineTo(cx + (r1 + 0) * FloatMath.sin(tsRad2), cy - (r1 + 0) * FloatMath.cos(tsRad2));
prev = to + step / 6 + init;
}
}
float angleRad = (float) ((180 + sweepAngle) * Math.PI / 180f); float angleRad = (float) ((180 + sweepAngle) * Math.PI / 180f);
pathForTurn.lineTo(48 + (r1 + 4) * FloatMath.sin(angleRad), 48 - (r1 + 4) * FloatMath.cos(angleRad)); pathForTurn.lineTo(cx + (r1 + 4) * FloatMath.sin(angleRad), cy - (r1 + 4) * FloatMath.cos(angleRad));
pathForTurn.lineTo(48 + (r1 + 6) * FloatMath.sin(angleRad + angleToRot/2), 48 - (r1 + 6) * FloatMath.cos(angleRad + angleToRot/2)); pathForTurn.lineTo(cx + (r1 + 6) * FloatMath.sin(angleRad + angleToRot/2), cy - (r1 + 6) * FloatMath.cos(angleRad + angleToRot/2));
pathForTurn.lineTo(48 + (r1 + 12) * FloatMath.sin(angleRad - angleToRot/2), 48 - (r1 + 12) * FloatMath.cos(angleRad - angleToRot/2)); pathForTurn.lineTo(cx + (r1 + 14) * FloatMath.sin(angleRad - angleToRot/2), cy - (r1 + 12) * FloatMath.cos(angleRad - angleToRot/2));
pathForTurn.lineTo(48 + (r1 + 6) * FloatMath.sin(angleRad - 3*angleToRot/2), 48 - (r1 + 6) * FloatMath.cos(angleRad - 3*angleToRot/2)); pathForTurn.lineTo(cx + (r1 + 6) * FloatMath.sin(angleRad - 3*angleToRot/2), cy - (r1 + 6) * FloatMath.cos(angleRad - 3*angleToRot/2));
pathForTurn.lineTo(48 + (r1 + 4) * FloatMath.sin(angleRad - angleToRot), 48 - (r1 + 4) * FloatMath.cos(angleRad - angleToRot)); pathForTurn.lineTo(cx + (r1 + 4) * FloatMath.sin(angleRad - angleToRot), cy - (r1 + 4) * FloatMath.cos(angleRad - angleToRot));
pathForTurn.lineTo(48 + r2 * FloatMath.sin(angleRad - angleToRot), 48 - r2 * FloatMath.cos(angleRad - angleToRot)); pathForTurn.lineTo(cx + r2 * FloatMath.sin(angleRad - angleToRot), cy - r2 * FloatMath.cos(angleRad - angleToRot));
r.set(48 - r2, 48 - r2, 48 + r2, 48 + r2); r.set(cx - r2, cy - r2, cx + r2, cy + r2);
pathForTurn.arcTo(r, 360 + sweepAngle + 90, -sweepAngle); pathForTurn.arcTo(r, 360 + sweepAngle + 90, -sweepAngle);
pathForTurn.lineTo(40, 48 + r2); pathForTurn.lineTo(cx - 8, cy + r2);
pathForTurn.lineTo(40, 48 + r1 + 8); pathForTurn.lineTo(cx - 8, ha - 1);
pathForTurn.close(); pathForTurn.close();
} }
pathForTurn.close(); pathForTurn.close();
@ -176,7 +200,7 @@ public class TurnPathHelper {
@Override @Override
protected void onBoundsChange(Rect bounds) { protected void onBoundsChange(Rect bounds) {
Matrix m = new Matrix(); Matrix m = new Matrix();
m.setScale(bounds.width()/96f, bounds.height()/96f); m.setScale(bounds.width()/72f, bounds.height()/72f);
p.transform(m, dp); p.transform(m, dp);
} }