From 1eb19f170c0af2cb051016a618546ad8872a8888 Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Tue, 29 Nov 2011 09:11:48 +0100 Subject: [PATCH] Fix small UI issues --- OsmAnd/res/drawable-hdpi/arrow_down.png | Bin 0 -> 3468 bytes OsmAnd/res/drawable-hdpi/arrow_up.png | Bin 0 -> 3459 bytes .../res/drawable-hdpi/box_expand_normal.png | Bin 0 -> 4704 bytes .../res/drawable-hdpi/box_expand_pressed.png | Bin 0 -> 4607 bytes OsmAnd/res/drawable-hdpi/box_leg.png | Bin 0 -> 3819 bytes OsmAnd/res/drawable-large/arrow_down.png | Bin 0 -> 3468 bytes OsmAnd/res/drawable-large/arrow_up.png | Bin 0 -> 3459 bytes .../res/drawable-large/box_expand_normal.png | Bin 0 -> 4704 bytes .../res/drawable-large/box_expand_pressed.png | Bin 0 -> 4607 bytes OsmAnd/res/drawable-large/box_leg.png | Bin 0 -> 3819 bytes OsmAnd/res/drawable/arrow_down.png | Bin 0 -> 3204 bytes OsmAnd/res/drawable/arrow_up.png | Bin 0 -> 3177 bytes OsmAnd/res/drawable/box_expand_normal.png | Bin 0 -> 4126 bytes OsmAnd/res/drawable/box_expand_pressed.png | Bin 0 -> 4107 bytes OsmAnd/res/drawable/box_leg.png | Bin 0 -> 3385 bytes OsmAnd/src/net/osmand/OsmAndFormatter.java | 4 +- .../activities/ShowRouteInfoActivity.java | 67 +--- .../osmand/plus/views/ContextMenuLayer.java | 59 ++- .../net/osmand/plus/views/MapInfoLayer.java | 367 +++++++----------- .../net/osmand/plus/views/TurnPathHelper.java | 197 ++++++++++ 20 files changed, 367 insertions(+), 327 deletions(-) create mode 100644 OsmAnd/res/drawable-hdpi/arrow_down.png create mode 100644 OsmAnd/res/drawable-hdpi/arrow_up.png create mode 100644 OsmAnd/res/drawable-hdpi/box_expand_normal.png create mode 100644 OsmAnd/res/drawable-hdpi/box_expand_pressed.png create mode 100644 OsmAnd/res/drawable-hdpi/box_leg.png create mode 100644 OsmAnd/res/drawable-large/arrow_down.png create mode 100644 OsmAnd/res/drawable-large/arrow_up.png create mode 100644 OsmAnd/res/drawable-large/box_expand_normal.png create mode 100644 OsmAnd/res/drawable-large/box_expand_pressed.png create mode 100644 OsmAnd/res/drawable-large/box_leg.png create mode 100644 OsmAnd/res/drawable/arrow_down.png create mode 100644 OsmAnd/res/drawable/arrow_up.png create mode 100644 OsmAnd/res/drawable/box_expand_normal.png create mode 100644 OsmAnd/res/drawable/box_expand_pressed.png create mode 100644 OsmAnd/res/drawable/box_leg.png create mode 100644 OsmAnd/src/net/osmand/plus/views/TurnPathHelper.java diff --git a/OsmAnd/res/drawable-hdpi/arrow_down.png b/OsmAnd/res/drawable-hdpi/arrow_down.png new file mode 100644 index 0000000000000000000000000000000000000000..a1f9758923bed08bf6bef69277497e4f4ffa42e6 GIT binary patch literal 3468 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 literal 0 HcmV?d00001 diff --git a/OsmAnd/res/drawable-large/arrow_down.png b/OsmAnd/res/drawable-large/arrow_down.png new file mode 100644 index 0000000000000000000000000000000000000000..a1f9758923bed08bf6bef69277497e4f4ffa42e6 GIT binary patch literal 3468 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 literal 0 HcmV?d00001 diff --git a/OsmAnd/res/drawable/arrow_down.png b/OsmAnd/res/drawable/arrow_down.png new file mode 100644 index 0000000000000000000000000000000000000000..5496d69bee9847c1c3d873c8d4c1a46d54183c98 GIT binary patch literal 3204 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 qNNgsP$-j?f literal 0 HcmV?d00001 diff --git a/OsmAnd/res/drawable/arrow_up.png b/OsmAnd/res/drawable/arrow_up.png new file mode 100644 index 0000000000000000000000000000000000000000..49d3e1f4c1603f128654d11a40cee2c0fbf15636 GIT binary patch literal 3177 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 P00000NkvXXu0mjfbBXe8 literal 0 HcmV?d00001 diff --git a/OsmAnd/res/drawable/box_expand_normal.png b/OsmAnd/res/drawable/box_expand_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..e7ee174c3e0dd4b851a297a143fecc739aa7e460 GIT binary patch literal 4126 zcmV+(5aI8MP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000F^Nkl=PzWJlj5$k7OO^Zg?|&nu zEC8q)7#;v_fzixdr%fmT()?rqYRzWztGT(kb}pCuGM~?9g%C1{P#njhrBdn7LZR?A zfbRe_jTrV-VqbF@7-6K91`vc{_|w9|!o43*Xhcb$RWymgobhTPt-`d*Ro}HbYNQ!DkM@LhILg6>x_bUKi0O(j?0?ShoR}8wO z6R~_Ix5407WU)uIoZdIrNHg90x)O5JFT8$dOQb0b>Kw1`HTuV2mXKOr)IHIR5v= zX`jzZ@@A>8cV|7^?7)gpYYn9olu|>l7(xh?QeDS!TrmG7l^`(Dl+76HH#7PIqX8(b zHG~ilLL_0j1^}XzVuxkGalqIcOdW=y_I)2=7)CN3_E|~$zAp}2$Q{>X_GhKNy*_kVEbpX|kaonB@<^EoF1S+Cc_AP90ZGc#v|5a66c zO1VEsEPnb#)Oy&6FEnn4Psa3B@Rjwr^?~e=IC46elMq&s@HI z`F*7nhDAAyG0HjDckbL-d+^}Fw*V^Uz5SSCa2&;u*zb{gXc&f#a=Gk1d-g1Q_UzgB z(&@AVz~P*0Aq0_95~UQ8QVukfQq-*DC?SOG?Chx9w{QQxxVShEpbVe|;JH!DflffL z13&6Bc57u6|Ms260AvBoOixdLdhz1Lk58XIE%W*ODc5x!DWwX-Pz`z!D1^|S=c!h! zMK(7#+r?tByuH2s1At!*kQRXUAizYMO(zEDT@z^l9{@N9VB-Aw^B=mdn^sB*&N+V# zV7TXboo2JykWxMYumND#q)yv}XO%HUFR9ck7(0z3IBEP_Bp=1gCfzB#>}JwF?*A$~ zWxJ~(42TY17V%$Lo*1v%ofsH9rHD275et%Q&PDKO>=}9haA2)yLmX`T1hG=4?q^%j z?>B0k literal 0 HcmV?d00001 diff --git a/OsmAnd/res/drawable/box_expand_pressed.png b/OsmAnd/res/drawable/box_expand_pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..e093f7fcdf52d673360d22ac0fa736b0a78654c6 GIT binary patch literal 4107 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 JPDHLkV1m?!te^k@ literal 0 HcmV?d00001 diff --git a/OsmAnd/res/drawable/box_leg.png b/OsmAnd/res/drawable/box_leg.png new file mode 100644 index 0000000000000000000000000000000000000000..3ba4025740043cc54bd616a8c00879930b55b251 GIT binary patch literal 3385 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 { RouteInfoAdapter(List list) { super(ShowRouteInfoActivity.this, R.layout.route_info_list_item, list); @@ -154,10 +95,10 @@ public class ShowRouteInfoActivity extends ListActivity { TextView timeLabel = (TextView) row.findViewById(R.id.time); ImageView icon = (ImageView) row.findViewById(R.id.direction); - if(!(icon.getDrawable() instanceof RouteDrawable)){ - icon.setImageDrawable(new RouteDrawable()); + if(!(icon.getDrawable() instanceof TurnPathHelper.RouteDrawable)){ + icon.setImageDrawable(new TurnPathHelper.RouteDrawable()); } - ((RouteDrawable) icon.getDrawable()).setRouteType(model.turnType); + ((TurnPathHelper.RouteDrawable) icon.getDrawable()).setRouteType(model.turnType); distanceLabel.setText(OsmAndFormatter.getFormattedDistance(model.distance, ShowRouteInfoActivity.this)); label.setText(model.descriptionRoute); int seconds = model.expectedTime % 60; diff --git a/OsmAnd/src/net/osmand/plus/views/ContextMenuLayer.java b/OsmAnd/src/net/osmand/plus/views/ContextMenuLayer.java index 40a68fab13..03dcb8f444 100644 --- a/OsmAnd/src/net/osmand/plus/views/ContextMenuLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/ContextMenuLayer.java @@ -12,11 +12,10 @@ import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.graphics.Canvas; import android.graphics.Color; -import android.graphics.Paint; import android.graphics.PointF; import android.graphics.Rect; import android.graphics.RectF; -import android.graphics.Paint.Style; +import android.graphics.drawable.Drawable; import android.util.DisplayMetrics; import android.view.Gravity; import android.view.MotionEvent; @@ -47,15 +46,12 @@ public class ContextMenuLayer extends OsmandMapLayer { private TextView textView; private DisplayMetrics dm; private OsmandMapTileView view; - private static final int BASE_TEXT_SIZE = 170; - private static final int MARGIN_Y_TO_BOX = 12; - private int textSize = BASE_TEXT_SIZE; + private int BASE_TEXT_SIZE = 170; + private int SHADOW_OF_LEG = 5; - private Paint paintLightBorder; - private Paint paintBlack; - private Paint paintBorder; private final MapActivity activity; - private Rect padding = new Rect(); + private Drawable boxLeg; + private float scaleCoefficient = 1; public ContextMenuLayer(MapActivity activity){ this.activity = activity; @@ -71,29 +67,28 @@ public class ContextMenuLayer extends OsmandMapLayer { dm = new DisplayMetrics(); WindowManager wmgr = (WindowManager) view.getContext().getSystemService(Context.WINDOW_SERVICE); wmgr.getDefaultDisplay().getMetrics(dm); - textSize = (int) (BASE_TEXT_SIZE * dm.density); + scaleCoefficient = dm.density; + if (Math.min(dm.widthPixels / (dm.density * 160), dm.heightPixels / (dm.density * 160)) > 2.5f) { + // large screen + scaleCoefficient *= 1.5f; + } + BASE_TEXT_SIZE = (int) (BASE_TEXT_SIZE * scaleCoefficient); + SHADOW_OF_LEG = (int) (SHADOW_OF_LEG * scaleCoefficient); - paintLightBorder = new Paint(); - paintLightBorder.setARGB(130, 220, 220, 220); - paintLightBorder.setStyle(Style.FILL); - paintBlack = new Paint(); - paintBlack.setARGB(255, 0, 0, 0); - paintBlack.setStyle(Style.STROKE); - paintBlack.setAntiAlias(true); - paintBorder = new Paint(); - paintBorder.setARGB(220, 160, 160, 160); - paintBorder.setStyle(Style.FILL); + boxLeg = view.getResources().getDrawable(R.drawable.box_leg); + boxLeg.setBounds(0, 0, boxLeg.getMinimumWidth(), boxLeg.getMinimumHeight()); textView = new TextView(view.getContext()); - LayoutParams lp = new LayoutParams(textSize, LayoutParams.WRAP_CONTENT); + LayoutParams lp = new LayoutParams(BASE_TEXT_SIZE, LayoutParams.WRAP_CONTENT); textView.setLayoutParams(lp); - textView.setTextSize(16); + textView.setTextSize(15 * scaleCoefficient); textView.setTextColor(Color.argb(255, 0, 0, 0)); textView.setMinLines(1); // textView.setMaxLines(15); textView.setGravity(Gravity.CENTER_HORIZONTAL); textView.setClickable(true); + textView.setBackgroundDrawable(view.getResources().getDrawable(R.drawable.box_free)); } @@ -102,11 +97,15 @@ public class ContextMenuLayer extends OsmandMapLayer { if(latLon != null){ int x = view.getRotatedMapXForPoint(latLon.getLatitude(), latLon.getLongitude()); int y = view.getRotatedMapYForPoint(latLon.getLatitude(), latLon.getLongitude()); - canvas.drawCircle(x, y, 5 * dm.density, paintBorder); - canvas.drawCircle(x, y, 5 * dm.density, paintBlack); + + int tx = x - boxLeg.getMinimumWidth() / 2; + int ty = y - boxLeg.getMinimumHeight() + SHADOW_OF_LEG; + canvas.translate(tx, ty); + boxLeg.draw(canvas); + canvas.translate(-tx, -ty); if (textView.getText().length() > 0) { - canvas.translate(x - textView.getWidth() / 2, y - textView.getHeight() - MARGIN_Y_TO_BOX); + canvas.translate(x - textView.getWidth() / 2, ty - textView.getTop()); int c = textView.getLineCount(); textView.draw(canvas); @@ -120,13 +119,13 @@ public class ContextMenuLayer extends OsmandMapLayer { } private void layoutText() { + Rect padding = new Rect(); if(textView.getLineCount() > 0) { textView.getBackground().getPadding(padding); } - int w = textSize; - int h = (int) ((textView.getPaint().getTextSize() +4) * textView.getLineCount()) + - padding.bottom + padding.top; - textView.layout(0, 0, w, h); + int w = BASE_TEXT_SIZE; + int h = (int) ((textView.getPaint().getTextSize() +4) * textView.getLineCount()); + textView.layout(0, -padding.bottom - padding.top, w, h); } public void setLocation(LatLon loc, String description){ @@ -190,7 +189,7 @@ public class ContextMenuLayer extends OsmandMapLayer { int x = (int) (px - view.getRotatedMapXForPoint(latLon.getLatitude(), latLon.getLongitude())); int y = (int) (py - view.getRotatedMapYForPoint(latLon.getLatitude(), latLon.getLongitude())); x += bs.width() / 2; - y += bs.height() + MARGIN_Y_TO_BOX; + y += bs.height() + boxLeg.getMinimumHeight() - SHADOW_OF_LEG; if (bs.contains(x, y)) { return true; } diff --git a/OsmAnd/src/net/osmand/plus/views/MapInfoLayer.java b/OsmAnd/src/net/osmand/plus/views/MapInfoLayer.java index cafdf549e2..73240fee5f 100644 --- a/OsmAnd/src/net/osmand/plus/views/MapInfoLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/MapInfoLayer.java @@ -20,14 +20,12 @@ import android.graphics.Paint.Cap; import android.graphics.Paint.Join; import android.graphics.Paint.Style; import android.graphics.Path; -import android.graphics.PointF; import android.graphics.Rect; import android.graphics.RectF; import android.graphics.drawable.Drawable; import android.location.Location; import android.text.format.DateFormat; import android.util.DisplayMetrics; -import android.util.FloatMath; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; @@ -42,16 +40,12 @@ import android.widget.TextView; public class MapInfoLayer extends OsmandMapLayer { - - private OsmandMapTileView view; - private boolean showMiniMap = false; private final MapActivity map; private final RouteLayer routeLayer; + private OsmandMapTileView view; - private boolean showArrivalTime = true; - - - private Path pathForTurn; + private boolean showMiniMap = false; + private boolean showArrivalTime = true; private Paint paintBlack; private Paint paintText; @@ -59,22 +53,14 @@ public class MapInfoLayer extends OsmandMapLayer { private Paint paintMiniRoute; private Paint fillBlack; private Paint fillRed; - private Paint paintAlphaGray; private Paint paintRouteDirection; - private RectF boundsForMiniRoute; - private long cachedLeftTime = 0; private float[] calculations = new float[1]; private int cachedMeters = 0; private float cachedSpeed = 0; + private float cachedRotate = 0; - private int centerMiniRouteY; - private int centerMiniRouteX; - private float scaleMiniRoute; - private Matrix pathTransform; - private TurnType cachedTurnType = null; - private String cachedExitOut = null; private DisplayMetrics dm; private float scaleCoefficient; @@ -88,18 +74,22 @@ public class MapInfoLayer extends OsmandMapLayer { private TextInfoControl distanceControl; private TextInfoControl speedControl; private TextInfoControl leftTimeControl; + private NextTurnInfoControl nextTurnInfo; private ImageView backToLocation; + private ImageView compassView; private View progressBar; // groups private List leftControls = new ArrayList(); private List rightControls = new ArrayList(); private ViewGroup statusBar; + private Drawable statusBarBackground; // currently pressed view private View pressedView = null; - private Drawable statusBarBackground; + + public MapInfoLayer(MapActivity map, RouteLayer layer){ this.map = map; @@ -144,11 +134,6 @@ public class MapInfoLayer extends OsmandMapLayer { paintImg.setFilterBitmap(true); paintImg.setAntiAlias(true); - paintAlphaGray = new Paint(); - paintAlphaGray.setStyle(Style.FILL_AND_STROKE); - paintAlphaGray.setColor(Color.LTGRAY); - paintAlphaGray.setAlpha(180); // do not make very transparent (to hide route) - paintRouteDirection = new Paint(); paintRouteDirection.setStyle(Style.FILL_AND_STROKE); paintRouteDirection.setColor(Color.rgb(100, 0, 255)); @@ -172,20 +157,6 @@ public class MapInfoLayer extends OsmandMapLayer { fillRed.setColor(Color.RED); fillRed.setAntiAlias(true); - boundsForMiniRoute = new RectF(0, 64, 96, 196); - - - // Scale to have proper view - scaleRect(boundsForMiniRoute); - - centerMiniRouteX = (int) (boundsForMiniRoute.width()/2); - centerMiniRouteY= (int) (boundsForMiniRoute.top + 3 * boundsForMiniRoute.height() /4); - scaleMiniRoute = 0.15f; - - pathForTurn = new Path(); - pathTransform = new Matrix(); - pathTransform.postScale(scaleCoefficient, scaleCoefficient); - pathTransform.postTranslate(boundsForMiniRoute.left, boundsForMiniRoute.top); STATUS_BAR_MARGIN_X = (int) (STATUS_BAR_MARGIN_X * scaleCoefficient); @@ -223,17 +194,19 @@ public class MapInfoLayer extends OsmandMapLayer { rightControls.add(speedControl); rightControls.add(leftTimeControl); - + + nextTurnInfo = new NextTurnInfoControl(R.drawable.box_top, paintText, paintSubText); + nextTurnInfo.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + showMiniMap = !showMiniMap; + view.refreshMap(); + } + }); + leftControls.add(nextTurnInfo); showArrivalTime = view.getSettings().SHOW_ARRIVAL_TIME_OTHERWISE_EXPECTED_TIME.get(); } - private void scaleRect(RectF r){ - r.bottom *= scaleCoefficient; - r.left *= scaleCoefficient; - r.right *= scaleCoefficient; - r.top *= scaleCoefficient; - } - public void relayoutLeftControls(MapInfoControl... cs){ for(MapInfoControl c : cs) { c.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED); @@ -309,14 +282,17 @@ public class MapInfoLayer extends OsmandMapLayer { @Override public void onDraw(Canvas canvas, RectF latlonBounds, RectF tilesRect, boolean nightMode) { - // prepare data (left distance, speed) + // prepare data (left distance, speed, compass) updateDistanceToGo(); updateSpeedInfo(); updateTimeLeftInfo(); - - - // draw route information - drawRouteInfo(canvas); + if(view.getRotate() != cachedRotate) { + cachedRotate = view.getRotate(); + compassView.invalidate(); + } + if(nextTurnInfo.isVisible() != (nextTurnInfo.getMeasuredHeight() > 0)) { + relayoutLeftControls(nextTurnInfo); + } // draw left controls for (int i = leftControls.size() - 1; i >= 0; i--) { @@ -391,50 +367,7 @@ public class MapInfoLayer extends OsmandMapLayer { } - private void drawRouteInfo(Canvas canvas) { - if(routeLayer != null && routeLayer.getHelper().isRouterEnabled()){ - if (routeLayer.getHelper().isFollowingMode()) { - int d = routeLayer.getHelper().getDistanceToNextRouteDirection(); - if (showMiniMap || d == 0) { - if (!routeLayer.getPath().isEmpty()) { - canvas.save(); - canvas.clipRect(boundsForMiniRoute); - // TODO draw rect boundsForMiniRoute - canvas.translate(centerMiniRouteX - view.getCenterPointX(), centerMiniRouteY - view.getCenterPointY()); - canvas.scale(scaleMiniRoute, scaleMiniRoute, view.getCenterPointX(), view.getCenterPointY()); - canvas.rotate(view.getRotate(), view.getCenterPointX(), view.getCenterPointY()); - canvas.drawCircle(view.getCenterPointX(), view.getCenterPointY(), 3 / scaleMiniRoute, fillBlack); - canvas.drawPath(routeLayer.getPath(), paintMiniRoute); - canvas.restore(); - } - } else { - // TODO draw rect boundsForMiniRoute - RouteDirectionInfo next = routeLayer.getHelper().getNextRouteDirectionInfo(); - if (next != null) { - if (!Algoritms.objectEquals(cachedTurnType, next.turnType)) { - cachedTurnType = next.turnType; - calcTurnPath(pathForTurn, cachedTurnType, pathTransform); - if (cachedTurnType.getExitOut() > 0) { - cachedExitOut = cachedTurnType.getExitOut() + ""; //$NON-NLS-1$ - } else { - cachedExitOut = null; - } - } - canvas.drawPath(pathForTurn, paintRouteDirection); - canvas.drawPath(pathForTurn, paintBlack); - if (cachedExitOut != null) { - canvas.drawText(cachedExitOut, boundsForMiniRoute.centerX() - 6 * scaleCoefficient, - boundsForMiniRoute.centerY() - 9 * scaleCoefficient, paintBlack); - } - canvas.drawText(OsmAndFormatter.getFormattedDistance(d, map), boundsForMiniRoute.left + 10 * scaleCoefficient, - boundsForMiniRoute.bottom - 9 * scaleCoefficient, paintBlack); - } - } - } - } - } - @Override public void destroyLayer() { } @@ -487,17 +420,6 @@ public class MapInfoLayer extends OsmandMapLayer { return progressBar; } - @Override - public boolean onSingleTap(PointF point) { - if (routeLayer != null && routeLayer.getHelper().isRouterEnabled()) { - if (boundsForMiniRoute.contains(point.x, point.y) && routeLayer.getHelper().isFollowingMode()) { - showMiniMap = !showMiniMap; - view.refreshMap(); - return true; - } - } - return false; - } private ViewGroup createStatusBar() { @@ -524,8 +446,7 @@ public class MapInfoLayer extends OsmandMapLayer { flp.gravity = Gravity.TOP; statusBar.setLayoutParams(flp); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); - //params.leftMargin = (int) (5 * scaleCoefficient); - ImageView compassView = new ImageView(view.getContext()) { + compassView = new ImageView(view.getContext()) { @Override protected void onDraw(Canvas canvas) { canvas.save(); @@ -578,7 +499,8 @@ public class MapInfoLayer extends OsmandMapLayer { fl.addView(progressBar, fparams); params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); - params.leftMargin = (int) (3 * scaleCoefficient); + params.leftMargin = (int) (10 * scaleCoefficient); + params.rightMargin = (int) (1 * scaleCoefficient); backToLocation = new ImageView(view.getContext()); backToLocation.setImageDrawable(view.getResources().getDrawable(R.drawable.back_to_loc)); backToLocation.setOnClickListener(new View.OnClickListener() { @@ -715,134 +637,115 @@ public class MapInfoLayer extends OsmandMapLayer { } } + public class NextTurnInfoControl extends MapInfoControl { + + private final float scaleMiniRoute = 0.15f; + private final float width = 96 * scaleCoefficient; + private final float height = 96 * scaleCoefficient; + + private final float centerMiniRouteY = 3 * height /4; + private final float centerMiniRouteX = width / 2; + + private Path pathForTurn = new Path(); + private Matrix pathTransform = new Matrix(); + + private TurnType cachedTurnType = null; + private String cachedExitOut = null; + private final Paint textPaint; + private final Paint subtextPaint; - // draw path 96x96 - public static void calcTurnPath(Path pathForTurn, TurnType turnType, Matrix transform) { - if(turnType == null){ - return; + public NextTurnInfoControl(int background, Paint textPaint, Paint subtextPaint) { + super(background); + this.textPaint = textPaint; + this.subtextPaint = subtextPaint; } - pathForTurn.reset(); - - int c = 48; - int w = 16; - pathForTurn.moveTo(c, 94); - float sarrowL = 30; // side of arrow - float harrowL = (float) Math.sqrt(2) * sarrowL; // hypotenuse of arrow - float spartArrowL = (float) ((sarrowL - w / Math.sqrt(2)) / 2); - float hpartArrowL = (float) (harrowL - w) / 2; - - if (TurnType.C.equals(turnType.getValue())) { - int h = 65; - - pathForTurn.rMoveTo(w / 2, 0); - pathForTurn.rLineTo(0, -h); - pathForTurn.rLineTo(hpartArrowL, 0); - pathForTurn.rLineTo(-harrowL / 2, -harrowL / 2); // center - pathForTurn.rLineTo(-harrowL / 2, harrowL / 2); - pathForTurn.rLineTo(hpartArrowL, 0); - pathForTurn.rLineTo(0, h); - } else if (TurnType.TR.equals(turnType.getValue())|| TurnType.TL.equals(turnType.getValue())) { - int b = TurnType.TR.equals(turnType.getValue())? 1 : -1; - int h = 36; - float quadShiftX = 22; - float quadShiftY = 22; - - pathForTurn.rMoveTo(-b * 8, 0); - pathForTurn.rLineTo(0, -h); - pathForTurn.rQuadTo(0, -quadShiftY, b * quadShiftX, -quadShiftY); - pathForTurn.rLineTo(0, hpartArrowL); - pathForTurn.rLineTo(b * harrowL / 2, -harrowL / 2); // center - pathForTurn.rLineTo(-b * harrowL / 2, -harrowL / 2); - pathForTurn.rLineTo(0, hpartArrowL); - pathForTurn.rQuadTo(-b * (quadShiftX + w), 0, -b * (quadShiftX + w), quadShiftY + w); - pathForTurn.rLineTo(0, h); - } else if (TurnType.TSLR.equals(turnType.getValue()) || TurnType.TSLL.equals(turnType.getValue())) { - int b = TurnType.TSLR.equals(turnType.getValue()) ? 1 : -1; - int h = 40; - int quadShiftY = 22; - float quadShiftX = (float) (quadShiftY / (1 + Math.sqrt(2))); - float nQuadShiftX = (sarrowL - 2 * spartArrowL) - quadShiftX - w; - float nQuadShifty = quadShiftY + (sarrowL - 2 * spartArrowL); - - pathForTurn.rMoveTo(-b * 4, 0); - pathForTurn.rLineTo(0, -h /* + partArrowL */); - pathForTurn.rQuadTo(0, -quadShiftY + quadShiftX /*- partArrowL*/, b * quadShiftX, -quadShiftY /*- partArrowL*/); - pathForTurn.rLineTo(b * spartArrowL, spartArrowL); - pathForTurn.rLineTo(0, -sarrowL); // center - pathForTurn.rLineTo(-b * sarrowL, 0); - pathForTurn.rLineTo(b * spartArrowL, spartArrowL); - pathForTurn.rQuadTo(b * nQuadShiftX, -nQuadShiftX, b * nQuadShiftX, nQuadShifty); - pathForTurn.rLineTo(0, h); - } else if (TurnType.TSHR.equals(turnType.getValue()) || TurnType.TSHL.equals(turnType.getValue())) { - int b = TurnType.TSHR.equals(turnType.getValue()) ? 1 : -1; - int h = 45; - float quadShiftX = 22; - float quadShiftY = -(float) (quadShiftX / (1 + Math.sqrt(2))); - float nQuadShiftX = -(sarrowL - 2 * spartArrowL) - quadShiftX - w; - float nQuadShiftY = -quadShiftY + (sarrowL - 2 * spartArrowL); - - pathForTurn.rMoveTo(-b * 8, 0); - pathForTurn.rLineTo(0, -h); - pathForTurn.rQuadTo(0, -(quadShiftX - quadShiftY), b * quadShiftX, quadShiftY); - pathForTurn.rLineTo(-b * spartArrowL, spartArrowL); - pathForTurn.rLineTo(b * sarrowL, 0); // center - pathForTurn.rLineTo(0, -sarrowL); - pathForTurn.rLineTo(-b * spartArrowL, spartArrowL); - pathForTurn.rCubicTo(b * nQuadShiftX / 2, nQuadShiftX / 2, b * nQuadShiftX, nQuadShiftX / 2, b * nQuadShiftX, nQuadShiftY); - pathForTurn.rLineTo(0, h); - } else if(TurnType.TU.equals(turnType.getValue())) { - int h = 54; - float quadShiftX = 13; - float quadShiftY = 13; - - pathForTurn.rMoveTo(28, 0); - pathForTurn.rLineTo(0, -h); - pathForTurn.rQuadTo(0, -(quadShiftY+w), -(quadShiftX+w), -(quadShiftY+w)); - pathForTurn.rQuadTo(-(quadShiftX+w), 0, -(quadShiftX+w), (quadShiftY+w)); - pathForTurn.rLineTo(-hpartArrowL, 0); - pathForTurn.rLineTo(harrowL/2, harrowL/2); // center - pathForTurn.rLineTo(harrowL/2, -harrowL/2); - pathForTurn.rLineTo(-hpartArrowL, 0); - pathForTurn.rQuadTo(0, -quadShiftX, quadShiftX, -quadShiftY); - pathForTurn.rQuadTo(quadShiftX, 0, quadShiftX, quadShiftY); - pathForTurn.rLineTo(0, h); - } else if (turnType != null && turnType.isRoundAbout()) { - float t = turnType.getTurnAngle(); - if (t >= 170 && t < 220) { - t = 220; - } else if (t > 160 && t < 170) { - t = 160; + + public boolean isVisible() { + // TODO + if (routeLayer != null && routeLayer.getHelper().isRouterEnabled() /*&& routeLayer.getHelper().isFollowingMode()*/) { + int d = routeLayer.getHelper().getDistanceToNextRouteDirection(); + if (d > 0 || (showMiniMap && !routeLayer.getPath().isEmpty())) { + return true; + } } - float sweepAngle = (t - 360) - 180; - if (sweepAngle < -360) { - sweepAngle += 360; - } - float r1 = 32f; - float r2 = 24f; - float angleToRot = 0.3f; - - pathForTurn.moveTo(48, 48 + r1 + 8); - pathForTurn.lineTo(48, 48 + r1); - RectF r = new RectF(48 - r1, 48 - r1, 48 + r1, 48 + r1); - pathForTurn.arcTo(r, 90, sweepAngle); - float angleRad = (float) ((180 + sweepAngle)*Math.PI/180f); - - pathForTurn.lineTo(48 + (r1 + 4) * FloatMath.sin(angleRad), 48 - (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(48 + (r1 + 12) * FloatMath.sin(angleRad - angleToRot/2), 48 - (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(48 + (r1 + 4) * FloatMath.sin(angleRad - angleToRot), 48 - (r1 + 4) * FloatMath.cos(angleRad - angleToRot)); - pathForTurn.lineTo(48 + r2 * FloatMath.sin(angleRad - angleToRot), 48 - r2 * FloatMath.cos(angleRad - angleToRot)); - - r.set(48 - r2, 48 - r2, 48 + r2, 48 + r2); - pathForTurn.arcTo(r, 360 + sweepAngle + 90, -sweepAngle); - pathForTurn.lineTo(40, 48 + r2); - pathForTurn.lineTo(40, 48 + r1 + 8); - pathForTurn.close(); + return false; } - pathForTurn.close(); - if(transform != null){ - pathForTurn.transform(transform); + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + pathTransform = new Matrix(); + pathTransform.postScale(scaleCoefficient, scaleCoefficient); + pathTransform.postTranslate(left, top); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + if(!isVisible()) { + setMeasuredDimension(0, 0); + } else if(showMiniMap){ + setMeasuredDimension((int) width, (int) height); + } else { + int h = (int) (5 * scaleCoefficient + Math.max(textPaint.getTextSize(), subtextPaint.getTextSize())); + setMeasuredDimension((int) width, (int) height + h); + } + } + + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + // TODO + if (routeLayer != null /*&& routeLayer.getHelper().isFollowingMode()*/) { + int d = routeLayer.getHelper().getDistanceToNextRouteDirection(); + if (showMiniMap || d == 0) { + if (!routeLayer.getPath().isEmpty()) { + canvas.save(); + canvas.translate(centerMiniRouteX - view.getCenterPointX(), centerMiniRouteY - view.getCenterPointY()); + canvas.scale(scaleMiniRoute, scaleMiniRoute, view.getCenterPointX(), view.getCenterPointY()); + canvas.rotate(view.getRotate(), view.getCenterPointX(), view.getCenterPointY()); + canvas.drawCircle(view.getCenterPointX(), view.getCenterPointY(), 3 / scaleMiniRoute, fillBlack); + canvas.drawPath(routeLayer.getPath(), paintMiniRoute); + canvas.restore(); + } + } else { + RouteDirectionInfo next = routeLayer.getHelper().getNextRouteDirectionInfo(); + if (next != null) { + if (!Algoritms.objectEquals(cachedTurnType, next.turnType)) { + cachedTurnType = next.turnType; + TurnPathHelper.calcTurnPath(pathForTurn, cachedTurnType, pathTransform); + if (cachedTurnType.getExitOut() > 0) { + cachedExitOut = cachedTurnType.getExitOut() + ""; //$NON-NLS-1$ + } else { + cachedExitOut = null; + } + } + canvas.drawPath(pathForTurn, paintRouteDirection); + canvas.drawPath(pathForTurn, paintBlack); + // TODO test + if (cachedExitOut != null) { + canvas.drawText(cachedExitOut, (getLeft() + getRight()) / 2 - 6 * scaleCoefficient, (getTop() + getBottom()) + / 2 - 9 * scaleCoefficient, paintBlack); + } + + String text = OsmAndFormatter.getFormattedDistance(cachedMeters, map); + String subtext = null; + int ls = text.lastIndexOf(' '); + if (ls != -1) { + subtext = text.substring(ls + 1); + text = text.substring(0, ls); + } + // TODO align center + int margin = (int) (10 * scaleCoefficient); + canvas.drawText(text, margin + getLeft(), getBottom() - 3 * scaleCoefficient, textPaint); + if (subtext != null) { + canvas.drawText(subtext, getLeft() + margin + 2 * scaleCoefficient + textPaint.measureText(text), getBottom() + - 3 * scaleCoefficient, subtextPaint); + } + } + } + } } } diff --git a/OsmAnd/src/net/osmand/plus/views/TurnPathHelper.java b/OsmAnd/src/net/osmand/plus/views/TurnPathHelper.java new file mode 100644 index 0000000000..9183300c0e --- /dev/null +++ b/OsmAnd/src/net/osmand/plus/views/TurnPathHelper.java @@ -0,0 +1,197 @@ +package net.osmand.plus.views; + +import net.osmand.plus.routing.RoutingHelper.TurnType; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.ColorFilter; +import android.graphics.Matrix; +import android.graphics.Paint; +import android.graphics.Path; +import android.graphics.Rect; +import android.graphics.RectF; +import android.graphics.Paint.Style; +import android.graphics.drawable.Drawable; +import android.util.FloatMath; + +public class TurnPathHelper { + + // draw path 96x96 + public static void calcTurnPath(Path pathForTurn, TurnType turnType, Matrix transform) { + if(turnType == null){ + return; + } + pathForTurn.reset(); + + int c = 48; + int w = 16; + pathForTurn.moveTo(c, 94); + float sarrowL = 30; // side of arrow + float harrowL = (float) Math.sqrt(2) * sarrowL; // hypotenuse of arrow + float spartArrowL = (float) ((sarrowL - w / Math.sqrt(2)) / 2); + float hpartArrowL = (float) (harrowL - w) / 2; + + if (TurnType.C.equals(turnType.getValue())) { + int h = 65; + + pathForTurn.rMoveTo(w / 2, 0); + pathForTurn.rLineTo(0, -h); + pathForTurn.rLineTo(hpartArrowL, 0); + pathForTurn.rLineTo(-harrowL / 2, -harrowL / 2); // center + pathForTurn.rLineTo(-harrowL / 2, harrowL / 2); + pathForTurn.rLineTo(hpartArrowL, 0); + pathForTurn.rLineTo(0, h); + } else if (TurnType.TR.equals(turnType.getValue())|| TurnType.TL.equals(turnType.getValue())) { + int b = TurnType.TR.equals(turnType.getValue())? 1 : -1; + int h = 36; + float quadShiftX = 22; + float quadShiftY = 22; + + pathForTurn.rMoveTo(-b * 8, 0); + pathForTurn.rLineTo(0, -h); + pathForTurn.rQuadTo(0, -quadShiftY, b * quadShiftX, -quadShiftY); + pathForTurn.rLineTo(0, hpartArrowL); + pathForTurn.rLineTo(b * harrowL / 2, -harrowL / 2); // center + pathForTurn.rLineTo(-b * harrowL / 2, -harrowL / 2); + pathForTurn.rLineTo(0, hpartArrowL); + pathForTurn.rQuadTo(-b * (quadShiftX + w), 0, -b * (quadShiftX + w), quadShiftY + w); + pathForTurn.rLineTo(0, h); + } else if (TurnType.TSLR.equals(turnType.getValue()) || TurnType.TSLL.equals(turnType.getValue())) { + int b = TurnType.TSLR.equals(turnType.getValue()) ? 1 : -1; + int h = 40; + int quadShiftY = 22; + float quadShiftX = (float) (quadShiftY / (1 + Math.sqrt(2))); + float nQuadShiftX = (sarrowL - 2 * spartArrowL) - quadShiftX - w; + float nQuadShifty = quadShiftY + (sarrowL - 2 * spartArrowL); + + pathForTurn.rMoveTo(-b * 4, 0); + pathForTurn.rLineTo(0, -h /* + partArrowL */); + pathForTurn.rQuadTo(0, -quadShiftY + quadShiftX /*- partArrowL*/, b * quadShiftX, -quadShiftY /*- partArrowL*/); + pathForTurn.rLineTo(b * spartArrowL, spartArrowL); + pathForTurn.rLineTo(0, -sarrowL); // center + pathForTurn.rLineTo(-b * sarrowL, 0); + pathForTurn.rLineTo(b * spartArrowL, spartArrowL); + pathForTurn.rQuadTo(b * nQuadShiftX, -nQuadShiftX, b * nQuadShiftX, nQuadShifty); + pathForTurn.rLineTo(0, h); + } else if (TurnType.TSHR.equals(turnType.getValue()) || TurnType.TSHL.equals(turnType.getValue())) { + int b = TurnType.TSHR.equals(turnType.getValue()) ? 1 : -1; + int h = 45; + float quadShiftX = 22; + float quadShiftY = -(float) (quadShiftX / (1 + Math.sqrt(2))); + float nQuadShiftX = -(sarrowL - 2 * spartArrowL) - quadShiftX - w; + float nQuadShiftY = -quadShiftY + (sarrowL - 2 * spartArrowL); + + pathForTurn.rMoveTo(-b * 8, 0); + pathForTurn.rLineTo(0, -h); + pathForTurn.rQuadTo(0, -(quadShiftX - quadShiftY), b * quadShiftX, quadShiftY); + pathForTurn.rLineTo(-b * spartArrowL, spartArrowL); + pathForTurn.rLineTo(b * sarrowL, 0); // center + pathForTurn.rLineTo(0, -sarrowL); + pathForTurn.rLineTo(-b * spartArrowL, spartArrowL); + pathForTurn.rCubicTo(b * nQuadShiftX / 2, nQuadShiftX / 2, b * nQuadShiftX, nQuadShiftX / 2, b * nQuadShiftX, nQuadShiftY); + pathForTurn.rLineTo(0, h); + } else if(TurnType.TU.equals(turnType.getValue())) { + int h = 54; + float quadShiftX = 13; + float quadShiftY = 13; + + pathForTurn.rMoveTo(28, 0); + pathForTurn.rLineTo(0, -h); + pathForTurn.rQuadTo(0, -(quadShiftY+w), -(quadShiftX+w), -(quadShiftY+w)); + pathForTurn.rQuadTo(-(quadShiftX+w), 0, -(quadShiftX+w), (quadShiftY+w)); + pathForTurn.rLineTo(-hpartArrowL, 0); + pathForTurn.rLineTo(harrowL/2, harrowL/2); // center + pathForTurn.rLineTo(harrowL/2, -harrowL/2); + pathForTurn.rLineTo(-hpartArrowL, 0); + pathForTurn.rQuadTo(0, -quadShiftX, quadShiftX, -quadShiftY); + pathForTurn.rQuadTo(quadShiftX, 0, quadShiftX, quadShiftY); + pathForTurn.rLineTo(0, h); + } else if (turnType != null && turnType.isRoundAbout()) { + float t = turnType.getTurnAngle(); + if (t >= 170 && t < 220) { + t = 220; + } else if (t > 160 && t < 170) { + t = 160; + } + float sweepAngle = (t - 360) - 180; + if (sweepAngle < -360) { + sweepAngle += 360; + } + float r1 = 32f; + float r2 = 24f; + float angleToRot = 0.3f; + + pathForTurn.moveTo(48, 48 + r1 + 8); + pathForTurn.lineTo(48, 48 + r1); + RectF r = new RectF(48 - r1, 48 - r1, 48 + r1, 48 + r1); + pathForTurn.arcTo(r, 90, sweepAngle); + float angleRad = (float) ((180 + sweepAngle)*Math.PI/180f); + + pathForTurn.lineTo(48 + (r1 + 4) * FloatMath.sin(angleRad), 48 - (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(48 + (r1 + 12) * FloatMath.sin(angleRad - angleToRot/2), 48 - (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(48 + (r1 + 4) * FloatMath.sin(angleRad - angleToRot), 48 - (r1 + 4) * FloatMath.cos(angleRad - angleToRot)); + pathForTurn.lineTo(48 + r2 * FloatMath.sin(angleRad - angleToRot), 48 - r2 * FloatMath.cos(angleRad - angleToRot)); + + r.set(48 - r2, 48 - r2, 48 + r2, 48 + r2); + pathForTurn.arcTo(r, 360 + sweepAngle + 90, -sweepAngle); + pathForTurn.lineTo(40, 48 + r2); + pathForTurn.lineTo(40, 48 + r1 + 8); + pathForTurn.close(); + } + pathForTurn.close(); + if(transform != null){ + pathForTurn.transform(transform); + } + } + + public static class RouteDrawable extends Drawable { + Paint paintRouteDirection; + Path p = new Path(); + Path dp = new Path(); + + public RouteDrawable(){ + paintRouteDirection = new Paint(); + paintRouteDirection.setStyle(Style.FILL_AND_STROKE); + paintRouteDirection.setColor(Color.rgb(100, 0, 255)); + paintRouteDirection.setAntiAlias(true); + } + + + @Override + protected void onBoundsChange(Rect bounds) { + Matrix m = new Matrix(); + m.setScale(bounds.width()/96f, bounds.height()/96f); + p.transform(m, dp); + } + + public void setRouteType(TurnType t){ + TurnPathHelper.calcTurnPath(p, t, null); + onBoundsChange(getBounds()); + } + + @Override + public void draw(Canvas canvas) { + canvas.drawPath(dp, paintRouteDirection); + } + + @Override + public int getOpacity() { + return 0; + } + + @Override + public void setAlpha(int alpha) { + paintRouteDirection.setAlpha(alpha); + + } + + @Override + public void setColorFilter(ColorFilter cf) { + paintRouteDirection.setColorFilter(cf); + } + + } + + +}