add support for diff screens (map)
git-svn-id: https://osmand.googlecode.com/svn/trunk@434 e29c36b1-1cfa-d876-8d93-3434fc2bb7b8
This commit is contained in:
parent
cffd20848d
commit
6de5f60c4e
4 changed files with 111 additions and 59 deletions
|
@ -27,9 +27,10 @@ public class ToDoConstants {
|
||||||
// FavoritesLayer, OsmBugsLayer, POIMapLayer, TransportInfoLayer, TransportStopsLayer (+)
|
// FavoritesLayer, OsmBugsLayer, POIMapLayer, TransportInfoLayer, TransportStopsLayer (+)
|
||||||
// PointLocationLayer, PointNavigationLayer, YandexTrafficLayer(+)
|
// PointLocationLayer, PointNavigationLayer, YandexTrafficLayer(+)
|
||||||
// 3.3 route_info_list_item.xml, ShowRouteInfoActivity, main.xml (+)
|
// 3.3 route_info_list_item.xml, ShowRouteInfoActivity, main.xml (+)
|
||||||
// 3.4 Fix map zoom by default map (in 1.5 for high density) OsmandMapTileView
|
// 3.4 MapInfoLayer (+)
|
||||||
// 3.5 MapInfoLayer
|
// 3.5 Touch distance events : MultiTouchSupport, AnimateDraggingMapThread (? timeMove) (+)
|
||||||
// 3.6 Touch distance events : MultiTouchSupport, AnimateDraggingMapThread (? timeMove)
|
|
||||||
|
// 3.6 Fix map zoom by default map (in 1.5 for high density) OsmandMapTileView
|
||||||
// 4. Icon back to location (+)
|
// 4. Icon back to location (+)
|
||||||
|
|
||||||
// Improvements
|
// Improvements
|
||||||
|
|
|
@ -226,7 +226,7 @@ public class AnimateDraggingMapThread implements Runnable {
|
||||||
// }
|
// }
|
||||||
timeZInt = 600;
|
timeZInt = 600;
|
||||||
timeZEnd = 500;
|
timeZEnd = 500;
|
||||||
timeMove = (int) (Math.abs(moveX) + Math.abs(moveY) * 4);
|
timeMove = (int) (Math.abs(moveX) + Math.abs(moveY) * 3);
|
||||||
if(timeMove > 2200){
|
if(timeMove > 2200){
|
||||||
timeMove = 2200;
|
timeMove = 2200;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package com.osmand.views;
|
package com.osmand.views;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
import android.graphics.Canvas;
|
import android.graphics.Canvas;
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
import android.graphics.Matrix;
|
import android.graphics.Matrix;
|
||||||
|
@ -7,11 +8,15 @@ import android.graphics.Paint;
|
||||||
import android.graphics.Path;
|
import android.graphics.Path;
|
||||||
import android.graphics.PointF;
|
import android.graphics.PointF;
|
||||||
import android.graphics.RectF;
|
import android.graphics.RectF;
|
||||||
|
import android.graphics.Paint.Cap;
|
||||||
|
import android.graphics.Paint.Join;
|
||||||
import android.graphics.Paint.Style;
|
import android.graphics.Paint.Style;
|
||||||
import android.location.Location;
|
import android.location.Location;
|
||||||
import android.text.format.DateFormat;
|
import android.text.format.DateFormat;
|
||||||
|
import android.util.DisplayMetrics;
|
||||||
import android.util.FloatMath;
|
import android.util.FloatMath;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.view.WindowManager;
|
||||||
|
|
||||||
import com.osmand.Algoritms;
|
import com.osmand.Algoritms;
|
||||||
import com.osmand.Messages;
|
import com.osmand.Messages;
|
||||||
|
@ -69,6 +74,10 @@ public class MapInfoLayer implements OsmandMapLayer {
|
||||||
private Matrix pathTransform;
|
private Matrix pathTransform;
|
||||||
private TurnType cachedTurnType = null;
|
private TurnType cachedTurnType = null;
|
||||||
private String cachedExitOut = null;
|
private String cachedExitOut = null;
|
||||||
|
private DisplayMetrics dm;
|
||||||
|
|
||||||
|
private float scaleCoefficient;
|
||||||
|
private float roundCorner;
|
||||||
|
|
||||||
|
|
||||||
public MapInfoLayer(MapActivity map, RouteLayer layer){
|
public MapInfoLayer(MapActivity map, RouteLayer layer){
|
||||||
|
@ -80,9 +89,20 @@ public class MapInfoLayer implements OsmandMapLayer {
|
||||||
public void initLayer(OsmandMapTileView view) {
|
public void initLayer(OsmandMapTileView view) {
|
||||||
this.view = view;
|
this.view = view;
|
||||||
paintBlack = new Paint();
|
paintBlack = new Paint();
|
||||||
|
WindowManager mgr = (WindowManager) view.getContext().getSystemService(Context.WINDOW_SERVICE);
|
||||||
|
dm = new DisplayMetrics();
|
||||||
|
mgr.getDefaultDisplay().getMetrics(dm);
|
||||||
|
scaleCoefficient = dm.density;
|
||||||
|
if(Math.min(dm.widthPixels/dm.densityDpi, dm.heightPixels/dm.densityDpi) > 2.5f){
|
||||||
|
// large screen
|
||||||
|
scaleCoefficient *= 1.5f;
|
||||||
|
}
|
||||||
|
|
||||||
|
roundCorner = 3* scaleCoefficient;
|
||||||
|
|
||||||
paintBlack.setStyle(Style.STROKE);
|
paintBlack.setStyle(Style.STROKE);
|
||||||
paintBlack.setColor(Color.BLACK);
|
paintBlack.setColor(Color.BLACK);
|
||||||
paintBlack.setTextSize(23);
|
paintBlack.setTextSize(23 * scaleCoefficient);
|
||||||
paintBlack.setAntiAlias(true);
|
paintBlack.setAntiAlias(true);
|
||||||
|
|
||||||
paintAlphaGray = new Paint();
|
paintAlphaGray = new Paint();
|
||||||
|
@ -102,8 +122,10 @@ public class MapInfoLayer implements OsmandMapLayer {
|
||||||
|
|
||||||
paintMiniRoute = new Paint();
|
paintMiniRoute = new Paint();
|
||||||
paintMiniRoute.setStyle(Style.STROKE);
|
paintMiniRoute.setStyle(Style.STROKE);
|
||||||
paintMiniRoute.setStrokeWidth(35);
|
paintMiniRoute.setStrokeWidth(35 * scaleCoefficient);
|
||||||
paintMiniRoute.setColor(Color.BLUE);
|
paintMiniRoute.setColor(Color.BLUE);
|
||||||
|
paintMiniRoute.setStrokeJoin(Join.ROUND);
|
||||||
|
paintMiniRoute.setStrokeCap(Cap.ROUND);
|
||||||
paintMiniRoute.setAntiAlias(true);
|
paintMiniRoute.setAntiAlias(true);
|
||||||
|
|
||||||
fillRed = new Paint();
|
fillRed = new Paint();
|
||||||
|
@ -119,30 +141,48 @@ public class MapInfoLayer implements OsmandMapLayer {
|
||||||
|
|
||||||
boundsForLeftTime = new RectF(0, 0, 75, 32);
|
boundsForLeftTime = new RectF(0, 0, 75, 32);
|
||||||
|
|
||||||
|
// Scale to have proper view
|
||||||
|
scaleRect(boundsForCompass);
|
||||||
|
scaleRect(boundsForDist);
|
||||||
|
scaleRect(boundsForZoom);
|
||||||
|
scaleRect(boundsForSpeed);
|
||||||
|
scaleRect(boundsForMiniRoute);
|
||||||
|
scaleRect(boundsForLeftTime);
|
||||||
|
|
||||||
centerMiniRouteX = 48;
|
|
||||||
centerMiniRouteY= 160;
|
|
||||||
|
centerMiniRouteX = (int) (boundsForMiniRoute.width()/2);
|
||||||
|
centerMiniRouteY= (int) (boundsForMiniRoute.top + 3 * boundsForMiniRoute.height() /4);
|
||||||
scaleMiniRoute = 0.15f;
|
scaleMiniRoute = 0.15f;
|
||||||
|
|
||||||
pathForCompass = new Path();
|
pathForCompass = new Path();
|
||||||
pathForCompass.moveTo(9, 15.5f);
|
pathForCompass.moveTo(9 * scaleCoefficient, 15.5f * scaleCoefficient);
|
||||||
pathForCompass.lineTo(22f, 15.5f);
|
pathForCompass.lineTo(22f * scaleCoefficient, 15.5f * scaleCoefficient);
|
||||||
pathForCompass.lineTo(15.5f, 30f);
|
pathForCompass.lineTo(15.5f * scaleCoefficient, 30f * scaleCoefficient);
|
||||||
pathForCompass.lineTo(9, 15.5f);
|
pathForCompass.lineTo(9 * scaleCoefficient, 15.5f * scaleCoefficient);
|
||||||
|
|
||||||
pathForCompass2 = new Path();
|
pathForCompass2 = new Path();
|
||||||
pathForCompass2.moveTo(9, 15.5f);
|
pathForCompass2.moveTo(9 * scaleCoefficient, 15.5f * scaleCoefficient);
|
||||||
pathForCompass2.lineTo(22f, 15.5f);
|
pathForCompass2.lineTo(22f * scaleCoefficient, 15.5f * scaleCoefficient);
|
||||||
pathForCompass2.lineTo(15.5f, 2f);
|
pathForCompass2.lineTo(15.5f * scaleCoefficient, 2f * scaleCoefficient);
|
||||||
pathForCompass2.lineTo(9, 15);
|
pathForCompass2.lineTo(9 * scaleCoefficient, 15.5f * scaleCoefficient);
|
||||||
|
|
||||||
pathForTurn = new Path();
|
pathForTurn = new Path();
|
||||||
pathTransform = new Matrix();
|
pathTransform = new Matrix();
|
||||||
pathTransform.setTranslate(boundsForMiniRoute.left, boundsForMiniRoute.top);
|
pathTransform.postScale(scaleCoefficient, scaleCoefficient);
|
||||||
|
pathTransform.postTranslate(boundsForMiniRoute.left, boundsForMiniRoute.top);
|
||||||
|
|
||||||
|
|
||||||
showArrivalTime = OsmandSettings.isShowingArrivalTime(view.getContext());
|
showArrivalTime = OsmandSettings.isShowingArrivalTime(view.getContext());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void scaleRect(RectF r){
|
||||||
|
r.bottom *= scaleCoefficient;
|
||||||
|
r.left *= scaleCoefficient;
|
||||||
|
r.right *= scaleCoefficient;
|
||||||
|
r.top *= scaleCoefficient;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean distChanged(int oldDist, int dist){
|
public boolean distChanged(int oldDist, int dist){
|
||||||
if(oldDist != 0 && oldDist - dist < 100 && Math.abs(((float) dist - oldDist)/oldDist) < 0.01){
|
if(oldDist != 0 && oldDist - dist < 100 && Math.abs(((float) dist - oldDist)/oldDist) < 0.01){
|
||||||
return false;
|
return false;
|
||||||
|
@ -170,7 +210,7 @@ public class MapInfoLayer implements OsmandMapLayer {
|
||||||
cachedDistString = null;
|
cachedDistString = null;
|
||||||
} else {
|
} else {
|
||||||
cachedDistString = MapUtils.getFormattedDistance(cachedMeters);
|
cachedDistString = MapUtils.getFormattedDistance(cachedMeters);
|
||||||
float right = paintBlack.measureText(cachedDistString) + 25 + boundsForDist.left;
|
float right = paintBlack.measureText(cachedDistString) + 25 * scaleCoefficient + boundsForDist.left;
|
||||||
if(cachedSpeedString != null){
|
if(cachedSpeedString != null){
|
||||||
boundsForSpeed.right = boundsForDist.right = Math.max(right, boundsForDist.right);
|
boundsForSpeed.right = boundsForDist.right = Math.max(right, boundsForDist.right);
|
||||||
} else {
|
} else {
|
||||||
|
@ -187,30 +227,33 @@ public class MapInfoLayer implements OsmandMapLayer {
|
||||||
cachedZoomString = view.getZoom()+""; //$NON-NLS-1$
|
cachedZoomString = view.getZoom()+""; //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
// draw zoom
|
// draw zoom
|
||||||
canvas.drawRoundRect(boundsForZoom, 3, 3, paintAlphaGray);
|
canvas.drawRoundRect(boundsForZoom, roundCorner, roundCorner, paintAlphaGray);
|
||||||
canvas.drawRoundRect(boundsForZoom, 3, 3, paintBlack);
|
canvas.drawRoundRect(boundsForZoom, roundCorner, roundCorner, paintBlack);
|
||||||
canvas.drawText(cachedZoomString, boundsForZoom.left + 5, boundsForZoom.bottom - 7, paintBlack);
|
canvas.drawText(cachedZoomString, boundsForZoom.left + 5 * scaleCoefficient, boundsForZoom.bottom - 8 * scaleCoefficient,
|
||||||
|
paintBlack);
|
||||||
|
|
||||||
// draw speed
|
// draw speed
|
||||||
if(map.getLastKnownLocation() != null && map.getLastKnownLocation().hasSpeed()){
|
if(map.getLastKnownLocation() != null && map.getLastKnownLocation().hasSpeed()){
|
||||||
if(Math.abs(map.getLastKnownLocation().getSpeed() - cachedSpeed) > .3f){
|
if(Math.abs(map.getLastKnownLocation().getSpeed() - cachedSpeed) > .3f){
|
||||||
cachedSpeed = map.getLastKnownLocation().getSpeed();
|
cachedSpeed = map.getLastKnownLocation().getSpeed();
|
||||||
cachedSpeedString = ((int) (cachedSpeed * 3.6f)) + Messages.getMessage(Messages.KEY_KM_H);
|
cachedSpeedString = ((int) (cachedSpeed * 3.6f)) + Messages.getMessage(Messages.KEY_KM_H);
|
||||||
float right = paintBlack.measureText(cachedSpeedString) + 8 + boundsForSpeed.left;
|
float right = paintBlack.measureText(cachedSpeedString) + 8 * scaleCoefficient + boundsForSpeed.left;
|
||||||
boundsForSpeed.right = boundsForDist.right = Math.max(right, boundsForDist.right);
|
boundsForSpeed.right = boundsForDist.right = Math.max(right, boundsForDist.right);
|
||||||
}
|
}
|
||||||
if(cachedSpeed > 0){
|
if(cachedSpeed > 0){
|
||||||
canvas.drawRoundRect(boundsForSpeed, 3, 3, paintAlphaGray);
|
canvas.drawRoundRect(boundsForSpeed, roundCorner, roundCorner, paintAlphaGray);
|
||||||
canvas.drawRoundRect(boundsForSpeed, 3, 3, paintBlack);
|
canvas.drawRoundRect(boundsForSpeed, roundCorner, roundCorner, paintBlack);
|
||||||
canvas.drawText(cachedSpeedString, boundsForSpeed.left + 8, boundsForSpeed.bottom - 9, paintBlack);
|
canvas.drawText(cachedSpeedString, boundsForSpeed.left + 8 * scaleCoefficient, boundsForSpeed.bottom - 9f * scaleCoefficient, paintBlack);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// draw distance to point
|
// draw distance to point
|
||||||
if(cachedDistString != null){
|
if(cachedDistString != null){
|
||||||
canvas.drawRoundRect(boundsForDist, 3, 3, paintAlphaGray);
|
canvas.drawRoundRect(boundsForDist, roundCorner, roundCorner, paintAlphaGray);
|
||||||
canvas.drawRoundRect(boundsForDist, 3, 3, paintBlack);
|
canvas.drawRoundRect(boundsForDist, roundCorner, roundCorner, paintBlack);
|
||||||
canvas.drawCircle(boundsForDist.left + 8, boundsForDist.bottom - 15, 4, fillRed);
|
canvas.drawCircle(boundsForDist.left + 8 * scaleCoefficient, boundsForDist.bottom - 15 * scaleCoefficient,
|
||||||
canvas.drawText(cachedDistString, boundsForDist.left + 15, boundsForDist.bottom - 9, paintBlack);
|
4 * scaleCoefficient, fillRed);
|
||||||
|
canvas.drawText(cachedDistString, boundsForDist.left + 15 * scaleCoefficient, boundsForDist.bottom - 9f * scaleCoefficient,
|
||||||
|
paintBlack);
|
||||||
}
|
}
|
||||||
|
|
||||||
// draw ruler
|
// draw ruler
|
||||||
|
@ -219,10 +262,10 @@ public class MapInfoLayer implements OsmandMapLayer {
|
||||||
// draw route information
|
// draw route information
|
||||||
drawRouteInfo(canvas);
|
drawRouteInfo(canvas);
|
||||||
|
|
||||||
// draw compass the last because it use rotating
|
// draw compass the last (!) because it use rotating
|
||||||
canvas.drawRoundRect(boundsForCompass, 3, 3, paintAlphaGray);
|
canvas.drawRoundRect(boundsForCompass, roundCorner, roundCorner, paintAlphaGray);
|
||||||
canvas.drawRoundRect(boundsForCompass, 3, 3, paintBlack);
|
canvas.drawRoundRect(boundsForCompass, roundCorner, roundCorner, paintBlack);
|
||||||
canvas.rotate(view.getRotate(), 15, 15);
|
canvas.rotate(view.getRotate(), 15 * scaleCoefficient, 15 * scaleCoefficient);
|
||||||
canvas.drawPath(pathForCompass2, fillRed);
|
canvas.drawPath(pathForCompass2, fillRed);
|
||||||
canvas.drawPath(pathForCompass, fillBlack);
|
canvas.drawPath(pathForCompass, fillBlack);
|
||||||
}
|
}
|
||||||
|
@ -271,21 +314,21 @@ public class MapInfoLayer implements OsmandMapLayer {
|
||||||
|
|
||||||
rulerDistPix = (int) (view.getWidth() * screenPercent / dist * baseDist);
|
rulerDistPix = (int) (view.getWidth() * screenPercent / dist * baseDist);
|
||||||
rulerDistName = MapUtils.getFormattedDistance(baseDist);
|
rulerDistName = MapUtils.getFormattedDistance(baseDist);
|
||||||
rulerBaseLine = view.getHeight() - 70;
|
rulerBaseLine = (int) (view.getHeight() - 70 * dm.density);
|
||||||
if(view.getParent() instanceof View){
|
if(view.getParent() instanceof View){
|
||||||
View zoomControls = ((View) view.getParent()).findViewById(R.id.ZoomControls);
|
View zoomControls = ((View) view.getParent()).findViewById(R.id.ZoomControls);
|
||||||
if(zoomControls != null){
|
if(zoomControls != null){
|
||||||
rulerBaseLine = zoomControls.getTop() - 5;
|
rulerBaseLine = (int) (zoomControls.getTop() - 5 * dm.density);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rulerTextLen = paintBlack.measureText(rulerDistName);
|
rulerTextLen = paintBlack.measureText(rulerDistName);
|
||||||
}
|
}
|
||||||
if (rulerDistName != null) {
|
if (rulerDistName != null) {
|
||||||
int w2 = view.getWidth() - 5;
|
int w2 = (int) (view.getWidth() - 5 * dm.density);
|
||||||
canvas.drawLine(w2 - rulerDistPix, rulerBaseLine, w2, rulerBaseLine, paintBlack);
|
canvas.drawLine(w2 - rulerDistPix, rulerBaseLine, w2, rulerBaseLine, paintBlack);
|
||||||
canvas.drawLine(w2 - rulerDistPix, rulerBaseLine, w2 - rulerDistPix, rulerBaseLine - 10, paintBlack);
|
canvas.drawLine(w2 - rulerDistPix, rulerBaseLine, w2 - rulerDistPix, rulerBaseLine - 10 * dm.density, paintBlack);
|
||||||
canvas.drawLine(w2, rulerBaseLine, w2, rulerBaseLine - 10, paintBlack);
|
canvas.drawLine(w2, rulerBaseLine, w2, rulerBaseLine - 10 * dm.density, paintBlack);
|
||||||
canvas.drawText(rulerDistName, w2 - (rulerDistPix + rulerTextLen)/2 + 1, rulerBaseLine - 5, paintBlack);
|
canvas.drawText(rulerDistName, w2 - (rulerDistPix + rulerTextLen)/2 + 1, rulerBaseLine - 5 * dm.density, paintBlack);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -297,8 +340,8 @@ public class MapInfoLayer implements OsmandMapLayer {
|
||||||
if (!routeLayer.getPath().isEmpty()) {
|
if (!routeLayer.getPath().isEmpty()) {
|
||||||
canvas.save();
|
canvas.save();
|
||||||
canvas.clipRect(boundsForMiniRoute);
|
canvas.clipRect(boundsForMiniRoute);
|
||||||
canvas.drawRoundRect(boundsForMiniRoute, 3, 3, paintAlphaGray);
|
canvas.drawRoundRect(boundsForMiniRoute, roundCorner, roundCorner, paintAlphaGray);
|
||||||
canvas.drawRoundRect(boundsForMiniRoute, 3, 3, paintBlack);
|
canvas.drawRoundRect(boundsForMiniRoute, roundCorner, roundCorner, paintBlack);
|
||||||
canvas.translate(centerMiniRouteX - view.getCenterPointX(), centerMiniRouteY - view.getCenterPointY());
|
canvas.translate(centerMiniRouteX - view.getCenterPointX(), centerMiniRouteY - view.getCenterPointY());
|
||||||
canvas.scale(scaleMiniRoute, scaleMiniRoute, view.getCenterPointX(), view.getCenterPointY());
|
canvas.scale(scaleMiniRoute, scaleMiniRoute, view.getCenterPointX(), view.getCenterPointY());
|
||||||
canvas.rotate(view.getRotate(), view.getCenterPointX(), view.getCenterPointY());
|
canvas.rotate(view.getRotate(), view.getCenterPointX(), view.getCenterPointY());
|
||||||
|
@ -307,8 +350,8 @@ public class MapInfoLayer implements OsmandMapLayer {
|
||||||
canvas.restore();
|
canvas.restore();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
canvas.drawRoundRect(boundsForMiniRoute, 3, 3, paintAlphaGray);
|
canvas.drawRoundRect(boundsForMiniRoute, roundCorner, roundCorner, paintAlphaGray);
|
||||||
canvas.drawRoundRect(boundsForMiniRoute, 3, 3, paintBlack);
|
canvas.drawRoundRect(boundsForMiniRoute, roundCorner, roundCorner, paintBlack);
|
||||||
RouteDirectionInfo next = routeLayer.getHelper().getNextRouteDirectionInfo();
|
RouteDirectionInfo next = routeLayer.getHelper().getNextRouteDirectionInfo();
|
||||||
if (next != null) {
|
if (next != null) {
|
||||||
if (!Algoritms.objectEquals(cachedTurnType, next.turnType)) {
|
if (!Algoritms.objectEquals(cachedTurnType, next.turnType)) {
|
||||||
|
@ -323,10 +366,11 @@ public class MapInfoLayer implements OsmandMapLayer {
|
||||||
canvas.drawPath(pathForTurn, paintRouteDirection);
|
canvas.drawPath(pathForTurn, paintRouteDirection);
|
||||||
canvas.drawPath(pathForTurn, paintBlack);
|
canvas.drawPath(pathForTurn, paintBlack);
|
||||||
if (cachedExitOut != null) {
|
if (cachedExitOut != null) {
|
||||||
canvas.drawText(cachedExitOut, boundsForMiniRoute.centerX() - 6, boundsForMiniRoute.centerY() - 9, paintBlack);
|
canvas.drawText(cachedExitOut, boundsForMiniRoute.centerX() - 6 * scaleCoefficient,
|
||||||
|
boundsForMiniRoute.centerY() - 9 * scaleCoefficient, paintBlack);
|
||||||
}
|
}
|
||||||
canvas.drawText(MapUtils.getFormattedDistance(d), boundsForMiniRoute.left + 10, boundsForMiniRoute.bottom - 9,
|
canvas.drawText(MapUtils.getFormattedDistance(d), boundsForMiniRoute.left + 10 * scaleCoefficient,
|
||||||
paintBlack);
|
boundsForMiniRoute.bottom - 9 * scaleCoefficient, paintBlack);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -346,7 +390,7 @@ public class MapInfoLayer implements OsmandMapLayer {
|
||||||
} else {
|
} else {
|
||||||
cachedLeftTimeString = DateFormat.format("k:mm aa",toFindTime).toString(); //$NON-NLS-1$
|
cachedLeftTimeString = DateFormat.format("k:mm aa",toFindTime).toString(); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
boundsForLeftTime.left = - paintBlack.measureText(cachedLeftTimeString) - 10 + boundsForLeftTime.right;
|
boundsForLeftTime.left = - paintBlack.measureText(cachedLeftTimeString) - 10 * scaleCoefficient + boundsForLeftTime.right;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if(Math.abs(time - cachedLeftTime) > 30){
|
if(Math.abs(time - cachedLeftTime) > 30){
|
||||||
|
@ -354,7 +398,7 @@ public class MapInfoLayer implements OsmandMapLayer {
|
||||||
int hours = time / (60 * 60);
|
int hours = time / (60 * 60);
|
||||||
int minutes = (time / 60) % 60;
|
int minutes = (time / 60) % 60;
|
||||||
cachedLeftTimeString = String.format("%d:%02d", hours, minutes); //$NON-NLS-1$
|
cachedLeftTimeString = String.format("%d:%02d", hours, minutes); //$NON-NLS-1$
|
||||||
boundsForLeftTime.left = - paintBlack.measureText(cachedLeftTimeString) - 10 + boundsForLeftTime.right;
|
boundsForLeftTime.left = - paintBlack.measureText(cachedLeftTimeString) - 10 * scaleCoefficient + boundsForLeftTime.right;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -362,20 +406,21 @@ public class MapInfoLayer implements OsmandMapLayer {
|
||||||
int w = (int) (boundsForLeftTime.right - boundsForLeftTime.left);
|
int w = (int) (boundsForLeftTime.right - boundsForLeftTime.left);
|
||||||
boundsForLeftTime.right = view.getWidth();
|
boundsForLeftTime.right = view.getWidth();
|
||||||
boundsForLeftTime.left = view.getWidth() - w;
|
boundsForLeftTime.left = view.getWidth() - w;
|
||||||
canvas.drawRoundRect(boundsForLeftTime, 3, 3, paintAlphaGray);
|
canvas.drawRoundRect(boundsForLeftTime, roundCorner, roundCorner, paintAlphaGray);
|
||||||
canvas.drawRoundRect(boundsForLeftTime, 3, 3, paintBlack);
|
canvas.drawRoundRect(boundsForLeftTime, roundCorner, roundCorner, paintBlack);
|
||||||
canvas.drawText(cachedLeftTimeString, boundsForLeftTime.left + 5, boundsForLeftTime.bottom - 9, paintBlack);
|
canvas.drawText(cachedLeftTimeString, boundsForLeftTime.left + 5 * scaleCoefficient, boundsForLeftTime.bottom - 9 * scaleCoefficient, paintBlack);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// draw path 96x96
|
||||||
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;
|
||||||
}
|
}
|
||||||
pathForTurn.reset();
|
pathForTurn.reset();
|
||||||
// draw path 96x96
|
|
||||||
int c = 48;
|
int c = 48;
|
||||||
int w = 16;
|
int w = 16;
|
||||||
pathForTurn.moveTo(c, 94);
|
pathForTurn.moveTo(c, 94);
|
||||||
|
|
|
@ -20,12 +20,14 @@ import android.graphics.Paint.Style;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
|
import android.util.DisplayMetrics;
|
||||||
import android.util.FloatMath;
|
import android.util.FloatMath;
|
||||||
import android.view.GestureDetector;
|
import android.view.GestureDetector;
|
||||||
import android.view.KeyEvent;
|
import android.view.KeyEvent;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
import android.view.SurfaceHolder;
|
import android.view.SurfaceHolder;
|
||||||
import android.view.SurfaceView;
|
import android.view.SurfaceView;
|
||||||
|
import android.view.WindowManager;
|
||||||
import android.view.GestureDetector.OnDoubleTapListener;
|
import android.view.GestureDetector.OnDoubleTapListener;
|
||||||
import android.view.GestureDetector.OnGestureListener;
|
import android.view.GestureDetector.OnGestureListener;
|
||||||
import android.view.SurfaceHolder.Callback;
|
import android.view.SurfaceHolder.Callback;
|
||||||
|
@ -49,8 +51,6 @@ public class OsmandMapTileView extends SurfaceView implements IMapDownloaderCall
|
||||||
public static final int OVERZOOM_IN = 2;
|
public static final int OVERZOOM_IN = 2;
|
||||||
|
|
||||||
protected final int emptyTileDivisor = 16;
|
protected final int emptyTileDivisor = 16;
|
||||||
protected final int timeForDraggingAnimation = 300;
|
|
||||||
protected final int minimumDistanceForDraggingAnimation = 40;
|
|
||||||
|
|
||||||
public interface OnTrackBallListener{
|
public interface OnTrackBallListener{
|
||||||
public boolean onTrackBallEvent(MotionEvent e);
|
public boolean onTrackBallEvent(MotionEvent e);
|
||||||
|
@ -114,6 +114,8 @@ public class OsmandMapTileView extends SurfaceView implements IMapDownloaderCall
|
||||||
Paint paintCenter;
|
Paint paintCenter;
|
||||||
Paint paintBitmap;
|
Paint paintBitmap;
|
||||||
|
|
||||||
|
private DisplayMetrics dm;
|
||||||
|
|
||||||
|
|
||||||
public OsmandMapTileView(Context context, AttributeSet attrs) {
|
public OsmandMapTileView(Context context, AttributeSet attrs) {
|
||||||
super(context, attrs);
|
super(context, attrs);
|
||||||
|
@ -159,6 +161,10 @@ public class OsmandMapTileView extends SurfaceView implements IMapDownloaderCall
|
||||||
gestureDetector = new GestureDetector(getContext(), this);
|
gestureDetector = new GestureDetector(getContext(), this);
|
||||||
multiTouchSupport = new MultiTouchSupport(getContext(), this);
|
multiTouchSupport = new MultiTouchSupport(getContext(), this);
|
||||||
gestureDetector.setOnDoubleTapListener(this);
|
gestureDetector.setOnDoubleTapListener(this);
|
||||||
|
|
||||||
|
WindowManager mgr = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);
|
||||||
|
dm = new DisplayMetrics();
|
||||||
|
mgr.getDefaultDisplay().getMetrics(dm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -356,8 +362,8 @@ public class OsmandMapTileView extends SurfaceView implements IMapDownloaderCall
|
||||||
int w = getCenterPointX();
|
int w = getCenterPointX();
|
||||||
int h = getCenterPointY();
|
int h = getCenterPointY();
|
||||||
if (showMapPosition) {
|
if (showMapPosition) {
|
||||||
canvas.drawCircle(w, h, 3, paintCenter);
|
canvas.drawCircle(w, h, 3 * dm.density, paintCenter);
|
||||||
canvas.drawCircle(w, h, 7, paintCenter);
|
canvas.drawCircle(w, h, 7 * dm.density, paintCenter);
|
||||||
}
|
}
|
||||||
canvas.restore();
|
canvas.restore();
|
||||||
for (OsmandMapLayer layer : layers) {
|
for (OsmandMapLayer layer : layers) {
|
||||||
|
@ -756,7 +762,7 @@ public class OsmandMapTileView extends SurfaceView implements IMapDownloaderCall
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
|
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
|
||||||
if(Math.abs(e1.getX() - e2.getX()) + Math.abs(e1.getX() - e2.getX()) > 50){
|
if(Math.abs(e1.getX() - e2.getX()) + Math.abs(e1.getX() - e2.getX()) > 50 * dm.density){
|
||||||
animatedDraggingThread.startDragging(Math.abs(velocityX/1000), Math.abs(velocityY/1000), e1.getX(), e1.getY(), e2.getX(), e2.getY());
|
animatedDraggingThread.startDragging(Math.abs(velocityX/1000), Math.abs(velocityY/1000), e1.getX(), e1.getY(), e2.getX(), e2.getY());
|
||||||
} else {
|
} else {
|
||||||
onScroll(e1, e2, e1.getX() - e2.getX(), e1.getY() - e2.getY());
|
onScroll(e1, e2, e1.getX() - e2.getX(), e1.getY() - e2.getY());
|
||||||
|
|
Loading…
Reference in a new issue