fix layout for different screen support
git-svn-id: https://osmand.googlecode.com/svn/trunk@433 e29c36b1-1cfa-d876-8d93-3434fc2bb7b8
This commit is contained in:
parent
5461e726a6
commit
cffd20848d
8 changed files with 95 additions and 41 deletions
|
@ -8,22 +8,28 @@ package com.osmand;
|
|||
*/
|
||||
public class ToDoConstants {
|
||||
|
||||
// TODO swing
|
||||
// 9. Fix issues with big files (such as netherlands) - save memory (!) - very slow due to transport index !
|
||||
// Current result : for big file (1 - task 60-80% time, 90% memory) (?)
|
||||
// !! 10. Improve address indexing (use relations). (?) // SLOBODSKAYA 157, 95
|
||||
// use relation "a6" (to accumulate streets!), "a3" to read all cities & define boundaries for city (& define that street in city).
|
||||
|
||||
// TODO max 85
|
||||
// ! 81. Add some objects to POI category (1) to add them into OSM 2) to help navigation)
|
||||
// highway (?), traffic_calming (?), barrier(?), military(?-), landuse (?), office(?), man_made(?), power(?),
|
||||
// railway( station, subway?) - issue 17
|
||||
// 82. Rotate map according compass
|
||||
|
||||
|
||||
// TODO BUGS Android
|
||||
// !! 3. different screens better support
|
||||
/// 3.1 after search_address_online.xml (+)
|
||||
// 3.2 Fix all layers (MapInfoLayer, RouteInfoLayer!)
|
||||
// 3.2 Fix all layers (RouteInfoLayer+!
|
||||
// FavoritesLayer, OsmBugsLayer, POIMapLayer, TransportInfoLayer, TransportStopsLayer (+)
|
||||
// PointLocationLayer, PointNavigationLayer, YandexTrafficLayer
|
||||
// 3.3 route_info_list_item.xml - ShowRouteInfoActivity, main.xml
|
||||
// PointLocationLayer, PointNavigationLayer, YandexTrafficLayer(+)
|
||||
// 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.5 Touch distance events : MultiTouchSupport, AnimateDraggingMapThread (? timeMove)
|
||||
// 3.5 MapInfoLayer
|
||||
// 3.6 Touch distance events : MultiTouchSupport, AnimateDraggingMapThread (? timeMove)
|
||||
// 4. Icon back to location (+)
|
||||
|
||||
// Improvements
|
||||
|
@ -44,12 +50,6 @@ public class ToDoConstants {
|
|||
// 63. Support simple offline routing(require new index file) (?)
|
||||
|
||||
|
||||
// TODO swing
|
||||
// 9. Fix issues with big files (such as netherlands) - save memory (!) - very slow due to transport index !
|
||||
// Current result : for big file (1 - task 60-80% time, 90% memory) (?)
|
||||
// !! 10. Improve address indexing (use relations). (?) // SLOBODSKAYA 157, 95
|
||||
// use relation "a6" (to accumulate streets!), "a3" to read all cities & define boundaries for city (& define that street in city).
|
||||
|
||||
// BUGS Swing
|
||||
|
||||
// DONE ANDROID :
|
||||
|
|
17
OsmAnd/res/layout-large/route_info_list_item.xml
Normal file
17
OsmAnd/res/layout-large/route_info_list_item.xml
Normal file
|
@ -0,0 +1,17 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<ImageView android:id="@+id/direction" android:layout_width="48dp" android:layout_height="48dp"/>
|
||||
<TextView android:text="" android:id="@+id/distance" android:layout_marginLeft ="5dp" android:textSize="23sp"
|
||||
android:layout_width="70dp" android:layout_height="wrap_content"></TextView>
|
||||
<TextView android:text="" android:id="@+id/description" android:layout_weight="1" android:textSize="23sp"
|
||||
android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
|
||||
<TextView android:text="" android:id="@+id/time" android:layout_marginLeft ="5dp"
|
||||
android:layout_width="65dp" android:layout_height="wrap_content" android:textSize="23sp"></TextView>
|
||||
|
||||
|
||||
|
||||
</LinearLayout>
|
|
@ -4,12 +4,12 @@
|
|||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<ImageView android:id="@+id/direction" android:layout_width="32dp" android:layout_height="32dp"></ImageView>
|
||||
<TextView android:text="@+id/TextView01" android:id="@+id/distance" android:layout_marginLeft ="5dp"
|
||||
<ImageView android:id="@+id/direction" android:layout_width="32dp" android:layout_height="32dp" />
|
||||
<TextView android:text="" android:id="@+id/distance" android:layout_marginLeft ="5dp"
|
||||
android:layout_width="50dp" android:layout_height="wrap_content"></TextView>
|
||||
<TextView android:text="@+id/TextView02" android:id="@+id/description" android:layout_weight="1"
|
||||
<TextView android:text="" android:id="@+id/description" android:layout_weight="1"
|
||||
android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
|
||||
<TextView android:text="@+id/TextView02" android:id="@+id/time" android:layout_marginLeft ="5dp"
|
||||
<TextView android:text="" android:id="@+id/time" android:layout_marginLeft ="5dp"
|
||||
android:layout_width="45dp" android:layout_height="wrap_content"></TextView>
|
||||
|
||||
|
||||
|
|
|
@ -14,10 +14,12 @@ import android.graphics.ColorFilter;
|
|||
import android.graphics.Matrix;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.Path;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.Paint.Style;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.location.Location;
|
||||
import android.os.Bundle;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
@ -41,6 +43,7 @@ public class ShowRouteInfoActivity extends ListActivity {
|
|||
|
||||
private RoutingHelper helper;
|
||||
private TextView header;
|
||||
private DisplayMetrics dm;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle icicle) {
|
||||
|
@ -52,6 +55,8 @@ public class ShowRouteInfoActivity extends ListActivity {
|
|||
|
||||
lv.addHeaderView(header);
|
||||
setContentView(lv);
|
||||
dm = new DisplayMetrics();
|
||||
getWindowManager().getDefaultDisplay().getMetrics(dm);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -62,10 +67,18 @@ public class ShowRouteInfoActivity extends ListActivity {
|
|||
int minutes = (helper.getLeftTime() / 60) % 60;
|
||||
header.setText(MessageFormat.format(getString(R.string.route_general_information), MapUtils.getFormattedDistance(dist),
|
||||
hours, minutes));
|
||||
float f = Math.min(dm.widthPixels/dm.densityDpi,dm.heightPixels/dm.densityDpi);
|
||||
if (f >= 3) {
|
||||
// large screen
|
||||
header.setTextSize(dm.scaledDensity * 23);
|
||||
}
|
||||
setListAdapter(new RouteInfoAdapter(RoutingHelper.getInstance(this).getRouteDirections()));
|
||||
}
|
||||
|
||||
public void onListItemClick(ListView parent, View v, int position, long id) {
|
||||
if(position == 0){
|
||||
return;
|
||||
}
|
||||
RouteDirectionInfo item = ((RouteInfoAdapter)getListAdapter()).getItem(position - 1);
|
||||
Location loc = helper.getLocationFromRouteDirection(item);
|
||||
if(loc != null){
|
||||
|
@ -78,9 +91,9 @@ public class ShowRouteInfoActivity extends ListActivity {
|
|||
class RouteDrawable extends Drawable {
|
||||
Paint paintRouteDirection;
|
||||
Path p = new Path();
|
||||
Matrix m = new Matrix();
|
||||
Path dp = new Path();
|
||||
|
||||
public RouteDrawable(){
|
||||
m.setScale(0.33f, 0.33f);
|
||||
paintRouteDirection = new Paint();
|
||||
paintRouteDirection.setStyle(Style.FILL_AND_STROKE);
|
||||
paintRouteDirection.setColor(Color.rgb(100, 0, 255));
|
||||
|
@ -88,13 +101,21 @@ public class ShowRouteInfoActivity extends ListActivity {
|
|||
}
|
||||
|
||||
|
||||
@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){
|
||||
MapInfoLayer.calcTurnPath(p, t, m);
|
||||
MapInfoLayer.calcTurnPath(p, t, null);
|
||||
onBoundsChange(getBounds());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void draw(Canvas canvas) {
|
||||
canvas.drawPath(p, paintRouteDirection);
|
||||
canvas.drawPath(dp, paintRouteDirection);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -494,8 +494,10 @@ public class MapInfoLayer implements OsmandMapLayer {
|
|||
pathForTurn.close();
|
||||
}
|
||||
pathForTurn.close();
|
||||
if(transform != null){
|
||||
pathForTurn.transform(transform);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroyLayer() {
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package com.osmand.views;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Matrix;
|
||||
|
@ -9,6 +10,8 @@ import android.graphics.PointF;
|
|||
import android.graphics.RectF;
|
||||
import android.graphics.Paint.Style;
|
||||
import android.location.Location;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.view.WindowManager;
|
||||
|
||||
import com.osmand.OsmandSettings.ApplicationMode;
|
||||
import com.osmand.osm.MapUtils;
|
||||
|
@ -27,12 +30,13 @@ public class PointLocationLayer implements OsmandMapLayer {
|
|||
private ApplicationMode appMode = ApplicationMode.DEFAULT;
|
||||
|
||||
protected Location lastKnownLocation = null;
|
||||
|
||||
private DisplayMetrics dm;
|
||||
private OsmandMapTileView view;
|
||||
|
||||
private Float heading = null;
|
||||
|
||||
|
||||
|
||||
private void initUI() {
|
||||
location = new Paint();
|
||||
location.setColor(Color.BLUE);
|
||||
|
@ -66,6 +70,9 @@ public class PointLocationLayer implements OsmandMapLayer {
|
|||
public void initLayer(OsmandMapTileView view) {
|
||||
this.view = view;
|
||||
initUI();
|
||||
dm = new DisplayMetrics();
|
||||
WindowManager wmgr = (WindowManager) view.getContext().getSystemService(Context.WINDOW_SERVICE);
|
||||
wmgr.getDefaultDisplay().getMetrics(dm);
|
||||
}
|
||||
|
||||
|
||||
|
@ -80,17 +87,17 @@ public class PointLocationLayer implements OsmandMapLayer {
|
|||
if (isLocationVisible(lastKnownLocation)) {
|
||||
int locationX = view.getMapXForPoint(lastKnownLocation.getLongitude());
|
||||
int locationY = view.getMapYForPoint(lastKnownLocation.getLatitude());
|
||||
int radius = MapUtils.getLengthXFromMeters(view.getFloatZoom(), view.getLatitude(), view.getLongitude(), lastKnownLocation
|
||||
.getAccuracy(), view.getTileSize(), view.getWidth());
|
||||
int radius = MapUtils.getLengthXFromMeters(view.getFloatZoom(), view.getLatitude(), view.getLongitude(),
|
||||
lastKnownLocation.getAccuracy(), view.getTileSize(), view.getWidth());
|
||||
|
||||
if(appMode == ApplicationMode.CAR){
|
||||
if(!lastKnownLocation.hasBearing()){
|
||||
canvas.drawCircle(locationX, locationY, RADIUS * 2.5f, location);
|
||||
canvas.drawCircle(locationX, locationY, RADIUS * 2.5f, bearingOver);
|
||||
canvas.drawCircle(locationX, locationY, RADIUS * 2.5f * dm.density, location);
|
||||
canvas.drawCircle(locationX, locationY, RADIUS * 2.5f * dm.density, bearingOver);
|
||||
}
|
||||
} else {
|
||||
canvas.drawCircle(locationX, locationY, RADIUS, location);
|
||||
canvas.drawCircle(locationX, locationY, RADIUS, bearingOver);
|
||||
canvas.drawCircle(locationX, locationY, RADIUS * dm.density, location);
|
||||
canvas.drawCircle(locationX, locationY, RADIUS * dm.density, bearingOver);
|
||||
}
|
||||
if (radius > RADIUS) {
|
||||
canvas.drawCircle(locationX, locationY, radius, area);
|
||||
|
@ -102,14 +109,14 @@ public class PointLocationLayer implements OsmandMapLayer {
|
|||
|
||||
if(lastKnownLocation.hasBearing()){
|
||||
float bearing = lastKnownLocation.getBearing();
|
||||
int radiusBearing = 30;
|
||||
int radiusBearing = (int) (30 * dm.density);
|
||||
if(lastKnownLocation.hasSpeed() && appMode != ApplicationMode.CAR){
|
||||
radiusBearing =
|
||||
Math.max(MapUtils.getLengthXFromMeters(view.getFloatZoom(), view.getLatitude(), view.getLongitude(),
|
||||
lastKnownLocation.getSpeed(), view.getTileSize(), view.getWidth()) * 2, radiusBearing);
|
||||
radiusBearing = Math.min(radiusBearing, view.getHeight() / 4);
|
||||
}
|
||||
radiusBearing += RADIUS /2;
|
||||
radiusBearing += RADIUS * dm.density /2;
|
||||
|
||||
pathForDirection.reset();
|
||||
pathForDirection.moveTo(0, 0);
|
||||
|
@ -119,13 +126,13 @@ public class PointLocationLayer implements OsmandMapLayer {
|
|||
Matrix m = new Matrix();
|
||||
m.reset();
|
||||
if(appMode == ApplicationMode.CAR){
|
||||
m.postScale(2.5f, radiusBearing * 1.5f);
|
||||
m.postScale(2.5f * dm.density, radiusBearing * 1.5f);
|
||||
m.postTranslate(0, -radiusBearing/2);
|
||||
} else if(appMode == ApplicationMode.BICYCLE){
|
||||
m.postScale(2f, radiusBearing);
|
||||
m.postScale(2 * dm.density, radiusBearing);
|
||||
m.postTranslate(0, -radiusBearing/2);
|
||||
} else {
|
||||
m.postScale(1, radiusBearing * 0.5f);
|
||||
m.postScale(dm.density, radiusBearing * 0.5f);
|
||||
m.postTranslate(0, -radiusBearing);
|
||||
}
|
||||
m.postTranslate(locationX, locationY);
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package com.osmand.views;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Matrix;
|
||||
|
@ -8,6 +9,8 @@ import android.graphics.Path;
|
|||
import android.graphics.PointF;
|
||||
import android.graphics.Paint.Style;
|
||||
import android.location.Location;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.view.WindowManager;
|
||||
|
||||
import com.osmand.osm.LatLon;
|
||||
|
||||
|
@ -21,6 +24,7 @@ public class PointNavigationLayer implements OsmandMapLayer {
|
|||
private OsmandMapTileView view;
|
||||
private Path pathForDirection;
|
||||
private float[] calculations = new float[2];
|
||||
private DisplayMetrics dm;
|
||||
|
||||
|
||||
private void initUI() {
|
||||
|
@ -34,6 +38,9 @@ public class PointNavigationLayer implements OsmandMapLayer {
|
|||
|
||||
public void initLayer(OsmandMapTileView view) {
|
||||
this.view = view;
|
||||
dm = new DisplayMetrics();
|
||||
WindowManager wmgr = (WindowManager) view.getContext().getSystemService(Context.WINDOW_SERVICE);
|
||||
wmgr.getDefaultDisplay().getMetrics(dm);
|
||||
initUI();
|
||||
}
|
||||
|
||||
|
@ -48,7 +55,7 @@ public class PointNavigationLayer implements OsmandMapLayer {
|
|||
int locationX = view.getMapXForPoint(pointToNavigate.getLongitude());
|
||||
int locationY = view.getMapYForPoint(pointToNavigate.getLatitude());
|
||||
|
||||
canvas.drawCircle(locationX, locationY, RADIUS, point);
|
||||
canvas.drawCircle(locationX, locationY, RADIUS * dm.density, point);
|
||||
} else {
|
||||
Location.distanceBetween(view.getLatitude(), view.getLongitude(), pointToNavigate.getLatitude(),
|
||||
pointToNavigate.getLongitude(), calculations);
|
||||
|
@ -61,8 +68,8 @@ public class PointNavigationLayer implements OsmandMapLayer {
|
|||
float radiusBearing = DIST_TO_SHOW;
|
||||
Matrix m = new Matrix();
|
||||
m.reset();
|
||||
m.postScale(RADIUS * 2, RADIUS * 2);
|
||||
m.postTranslate(0, -radiusBearing);
|
||||
m.postScale(RADIUS * dm.density * 2, RADIUS * 2 * dm.density);
|
||||
m.postTranslate(0, - radiusBearing * dm.density );
|
||||
m.postTranslate(view.getCenterPointX(), view.getCenterPointY());
|
||||
m.postRotate(bearing, view.getCenterPointX(), view.getCenterPointY());
|
||||
pathForDirection.transform(m);
|
||||
|
|
|
@ -168,8 +168,8 @@ public class RouteInfoLayer implements OsmandMapLayer, IRouteInformationListener
|
|||
if(isVisible()){
|
||||
border.set(layout.getLeft() - 10 * dm.density, layout.getTop() - 4 * dm.density,
|
||||
layout.getRight() - 5 * dm.density, layout.getBottom() + 4 * dm.density);
|
||||
canvas.drawRoundRect(border, 5, 5, paintBorder);
|
||||
canvas.drawRoundRect(border, 5, 5, paintBlack);
|
||||
canvas.drawRoundRect(border, 5 * dm.density, 5 * dm.density, paintBorder);
|
||||
canvas.drawRoundRect(border, 5 * dm.density, 5 * dm.density, paintBlack);
|
||||
List<RouteDirectionInfo> dir = routingHelper.getRouteDirections();
|
||||
if(dir != null && directionInfo < dir.size() && directionInfo >= 0){
|
||||
canvas.rotate(view.getRotate(), view.getCenterPointX(), view.getCenterPointY());
|
||||
|
@ -178,8 +178,8 @@ public class RouteInfoLayer implements OsmandMapLayer, IRouteInformationListener
|
|||
Location loc = routingHelper.getLocationFromRouteDirection(info);
|
||||
int x = view.getRotatedMapXForPoint(loc.getLatitude(), loc.getLongitude());
|
||||
int y = view.getRotatedMapYForPoint(loc.getLatitude(), loc.getLongitude());
|
||||
canvas.drawCircle(x, y, 5, paintBorder);
|
||||
canvas.drawCircle(x, y, 5, paintBlack);
|
||||
canvas.drawCircle(x, y, 5 * dm.density, paintBorder);
|
||||
canvas.drawCircle(x, y, 5 * dm.density, paintBlack);
|
||||
|
||||
if (textView.getText().length() > 0) {
|
||||
canvas.translate(x - textView.getWidth() / 2, y - textView.getHeight() - 12);
|
||||
|
|
Loading…
Reference in a new issue