update map buttons

This commit is contained in:
Victor Shcherb 2015-03-11 23:44:55 +01:00
parent 8f8c4b0874
commit dcb3996a5b
7 changed files with 264 additions and 24 deletions

View file

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"><shape android:shape="oval">
<solid android:color="@color/color_myloc_distance" />
<stroke android:color="@color/map_widget_stroke" android:width="@dimen/map_button_stroke"/>
</shape></item>
<item><shape android:shape="oval">
<solid android:color="@color/map_widget_blue" />
<stroke android:color="@color/map_widget_stroke" android:width="@dimen/map_button_stroke"/>
</shape></item>
</selector>

View file

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"><shape android:shape="oval">
<solid android:color="@color/map_widget_light_pressed" />
<stroke android:color="@color/map_widget_stroke" android:width="@dimen/map_button_stroke"/>
</shape></item>
<item><shape android:shape="oval">
<solid android:color="@color/map_widget_light_trans" />
<stroke android:color="@color/map_widget_stroke" android:width="@dimen/map_button_stroke"/>
</shape></item>
</selector>

View file

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"><shape android:shape="rectangle">
<solid android:color="@color/map_widget_light_pressed" />
<corners android:radius="@dimen/map_button_rect_rad" />
<stroke android:width="@dimen/map_button_stroke" android:color="@color/map_widget_stroke" />
</shape></item>
<item><shape android:shape="rectangle">
<solid android:color="@color/map_widget_dark" />
<corners android:radius="@dimen/map_button_rect_rad" />
<stroke android:width="@dimen/map_button_stroke" android:color="@color/map_widget_stroke" />
</shape></item>
</selector>

View file

@ -20,6 +20,7 @@
android:layout_width="@dimen/map_button_size" android:layout_width="@dimen/map_button_size"
android:layout_height="@dimen/map_button_size" android:layout_height="@dimen/map_button_size"
android:background="@drawable/btn_round" android:background="@drawable/btn_round"
android:id="@+id/map_menu_button"
android:src="@drawable/ic_action_remove_light" /> android:src="@drawable/ic_action_remove_light" />
<ImageButton <ImageButton
@ -27,6 +28,7 @@
android:layout_height="@dimen/map_button_size" android:layout_height="@dimen/map_button_size"
android:layout_marginLeft="@dimen/map_button_spacing" android:layout_marginLeft="@dimen/map_button_spacing"
android:background="@drawable/btn_round" android:background="@drawable/btn_round"
android:id="@+id/map_route_info_button"
android:src="@drawable/ic_action_remove_light" /> android:src="@drawable/ic_action_remove_light" />
</LinearLayout> </LinearLayout>
@ -38,6 +40,7 @@
android:layout_marginRight="@dimen/map_button_margin" > android:layout_marginRight="@dimen/map_button_margin" >
<ImageButton <ImageButton
android:id="@+id/map_my_location_button"
android:layout_width="@dimen/map_button_size" android:layout_width="@dimen/map_button_size"
android:layout_height="@dimen/map_button_size" android:layout_height="@dimen/map_button_size"
android:layout_gravity="bottom" android:layout_gravity="bottom"
@ -52,14 +55,14 @@
android:orientation="vertical" > android:orientation="vertical" >
<ImageButton <ImageButton
android:id="@+id/" android:id="@+id/map_zoom_in_button"
android:layout_width="@dimen/map_button_size" android:layout_width="@dimen/map_button_size"
android:layout_height="@dimen/map_button_size" android:layout_height="@dimen/map_button_size"
android:background="@drawable/btn_circle" android:background="@drawable/btn_circle"
android:src="@drawable/ic_action_remove_light" /> android:src="@drawable/ic_action_remove_light" />
<ImageButton <ImageButton
android:id="@+id/map_zoom_out_button"
android:layout_width="@dimen/map_button_size" android:layout_width="@dimen/map_button_size"
android:layout_height="@dimen/map_button_size" android:layout_height="@dimen/map_button_size"
android:layout_marginTop="@dimen/map_button_spacing" android:layout_marginTop="@dimen/map_button_spacing"
@ -75,24 +78,52 @@
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="30dp" android:layout_height="@dimen/map_route_buttons_height"
android:background="@drawable/btn_flat" android:id="@+id/map_route_preparation_layout"
android:layout_gravity="bottom" > android:layout_gravity="bottom" >
<ImageButton
android:layout_width="@dimen/map_route_buttons_width"
android:layout_height="match_parent"
android:id="@+id/map_cancel_route_button"
android:background="@drawable/btn_flat"
android:layout_gravity="center_vertical"
android:src="@drawable/ic_action_remove_light" />
<ImageButton
android:layout_width="@dimen/map_route_buttons_width"
android:layout_height="match_parent"
android:id="@+id/map_waypoints_route_button"
android:background="@drawable/btn_flat"
android:layout_gravity="center_vertical"
android:src="@drawable/ic_action_remove_light" />
<ImageButton
android:layout_width="@dimen/map_route_buttons_width"
android:layout_height="match_parent"
android:background="@drawable/btn_flat"
android:id="@+id/map_options_route_button"
android:layout_gravity="center_vertical"
android:src="@drawable/ic_action_remove_light" />
<TextView <TextView
android:layout_width="0dp" android:layout_width="match_parent"
android:layout_height="fill_parent" android:layout_height="match_parent"
android:layout_weight="1" android:background="@drawable/btn_flat"
android:ellipsize="end" android:layout_gravity="center_vertical"
android:gravity="center" android:id="@+id/map_go_route_button"
android:maxLines="1" android:gravity="center_vertical"
android:text="Route preparation" > android:paddingLeft="12dp"
</TextView> android:drawableLeft="@drawable/ic_action_remove_light"
android:textSize="20sp"
android:drawablePadding="4dp" />
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="50dp" android:layout_height="wrap_content"
android:id="@+id/map_context_menu_layout"
android:visibility="gone"
android:background="@drawable/btn_flat" android:background="@drawable/btn_flat"
android:layout_gravity="bottom"> android:layout_gravity="bottom">
@ -101,11 +132,7 @@
android:layout_height="fill_parent" android:layout_height="fill_parent"
android:layout_weight="1" android:layout_weight="1"
android:ellipsize="end" android:ellipsize="end"
android:gravity="center" android:gravity="center">
android:textColor="@color/color_black"
android:textSize="24sp"
android:maxLines="1"
android:text="Context menu" >
</TextView> </TextView>
<ImageButton <ImageButton

View file

@ -11,8 +11,11 @@
<color name="list_item_background_dark_pressed">#be39464d</color> <color name="list_item_background_dark_pressed">#be39464d</color>
<color name="map_widget_stroke">#333333</color> <color name="map_widget_stroke">#333333</color>
<color name="map_widget_light">#eeffffff</color> <color name="map_widget_light">#aaffffff</color>
<color name="map_widget_dark">#aa3f3f3f</color>
<color name="map_widget_light_trans">#eeffffff</color>
<color name="map_widget_light_pressed">#ddcccccc</color> <color name="map_widget_light_pressed">#ddcccccc</color>
<color name="map_widget_blue">#3030FF</color>
<color name="actionbar_dark_color">#39464d</color> <color name="actionbar_dark_color">#39464d</color>

View file

@ -48,6 +48,8 @@
<dimen name="dashboard_parking_left_margin">16dp</dimen> <dimen name="dashboard_parking_left_margin">16dp</dimen>
<dimen name="dashboard_parking_icon_size">48dp</dimen> <dimen name="dashboard_parking_icon_size">48dp</dimen>
<!-- map buttons --> <!-- map buttons -->
<dimen name="map_route_buttons_width">60dp</dimen>
<dimen name="map_route_buttons_height">54dp</dimen>
<dimen name="map_address_height">40dp</dimen> <dimen name="map_address_height">40dp</dimen>
<dimen name="map_button_size">48dp</dimen> <dimen name="map_button_size">48dp</dimen>
<dimen name="map_widget_icon">24dp</dimen> <dimen name="map_widget_icon">24dp</dimen>

View file

@ -4,12 +4,14 @@ import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.List; import java.util.List;
import android.content.Context;
import android.content.pm.ActivityInfo; import android.content.pm.ActivityInfo;
import android.util.DisplayMetrics; import android.util.DisplayMetrics;
import android.util.Log; import android.util.Log;
import android.view.Surface; import android.view.Surface;
import net.osmand.PlatformUtil; import net.osmand.PlatformUtil;
import net.osmand.data.RotatedTileBox; import net.osmand.data.RotatedTileBox;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandSettings; import net.osmand.plus.OsmandSettings;
import net.osmand.plus.OsmandSettings.CommonPreference; import net.osmand.plus.OsmandSettings.CommonPreference;
import net.osmand.plus.R; import net.osmand.plus.R;
@ -30,6 +32,7 @@ import net.osmand.plus.views.controls.SmallMapMenuControls;
import android.graphics.Canvas; import android.graphics.Canvas;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.PointF; import android.graphics.PointF;
import android.graphics.drawable.Drawable;
import android.os.Handler; import android.os.Handler;
import android.view.Gravity; import android.view.Gravity;
import android.view.MotionEvent; import android.view.MotionEvent;
@ -38,12 +41,90 @@ import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams; import android.view.ViewGroup.LayoutParams;
import android.widget.FrameLayout; import android.widget.FrameLayout;
import android.widget.ImageButton; import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.SeekBar; import android.widget.SeekBar;
public class MapControlsLayer extends OsmandMapLayer { public class MapControlsLayer extends OsmandMapLayer {
private static final int TIMEOUT_TO_SHOW_BUTTONS = 5000; private static final int TIMEOUT_TO_SHOW_BUTTONS = 5000;
private static class MapControl {
ImageView iv;
int bgDark;
int bgLight;
int resId;
int resLight = R.color.icon_color_light;
int resDark = 0;
boolean nightMode = false;
boolean f = true;
public MapControl setRoundTransparent() {
setBg(R.drawable.btn_circle_trans);
return this;
}
public MapControl setBg(int dayBg, int nightBg) {
bgDark = nightBg;
bgLight = dayBg;
f = true;
return this;
}
public MapControl setBg(int bg) {
bgDark = bg;
bgLight = bg;
f = true;
return this;
}
public static MapControl create(ImageView iv, int resId) {
MapControl mc = new MapControl();
mc.iv = iv;
mc.resId = resId;
mc.setBg(R.drawable.btn_circle);
return mc;
}
public boolean setIconResId(int resId) {
if(this.resId == resId) {
return false;
}
this.resId = resId;
f = true;
return true;
}
public boolean setIconColorId(int clr) {
if(resLight == clr && resDark == clr) {
return false;
}
resLight = clr;
resDark = clr;
f = true;
return true;
}
public void update(OsmandApplication ctx, boolean night) {
if (nightMode == night && !f) {
return;
}
f = false;
nightMode = night;
iv.setBackgroundDrawable(ctx.getResources().getDrawable(night ? bgDark : bgLight));
iv.setImageDrawable(ctx.getIconsCache().getIcon(resId, nightMode ? resDark : resLight));
}
}
private List<MapControl> controls = new ArrayList<MapControlsLayer.MapControl>();
private final MapActivity mapActivity; private final MapActivity mapActivity;
private int shadowColor = -1; private int shadowColor = -1;
@ -68,12 +149,21 @@ public class MapControlsLayer extends OsmandMapLayer {
private OsmandSettings settings; private OsmandSettings settings;
private MapControl backToLocationControl;
private MapControl menuControl;
public MapControlsLayer(MapActivity activity){ public MapControlsLayer(MapActivity activity){
this.mapActivity = activity; this.mapActivity = activity;
settings = activity.getMyApplication().getSettings(); settings = activity.getMyApplication().getSettings();
} }
@Override @Override
public boolean drawInScreenPixels() { public boolean drawInScreenPixels() {
return true; return true;
@ -132,13 +222,63 @@ public class MapControlsLayer extends OsmandMapLayer {
private void initNewControls() { private void initNewControls() {
initZooms(); initZooms();
initControls();
}
private void initControls() {
View backToLocation = mapActivity.findViewById(R.id.map_my_location_button);
backToLocationControl = MapControl.create((ImageView) backToLocation, R.drawable.ic_action_get_my_location).setBg(R.drawable.btn_circle_blue)
;
controls.add(backToLocationControl);
backToLocation.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mapActivity.getMapViewTrackingUtilities().backToLocationImpl();
}
});
View backToMenuButton = mapActivity.findViewById(R.id.map_menu_button);
menuControl = MapControl.create((ImageView) backToMenuButton, R.drawable.ic_navigation_drawer).
setBg(R.drawable.btn_round, R.drawable.btn_round_night);
controls.add(menuControl);
backToMenuButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// double lat = activity.getMapView().getLatitude();
// double lon = activity.getMapView().getLongitude();
// MainMenuActivity.backToMainMenuDialog(activity, new LatLon(lat, lon));
notifyClicked();
if(mapActivity.getMyApplication().getSettings().USE_DASHBOARD_INSTEAD_OF_DRAWER.get()) {
mapActivity.getDashboard().setDashboardVisibility(true);
} else {
mapActivity.getMapActions().onDrawerBack();
mapActivity.getMapActions().toggleDrawer();
}
}
});
View routePlanButton = mapActivity.findViewById(R.id.map_route_info_button);
controls.add(MapControl.create((ImageView) routePlanButton, R.drawable.ic_action_info_dark).
setBg(R.drawable.btn_round, R.drawable.btn_round_night));
routePlanButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
notifyClicked();
mapActivity.getRoutingHelper().setRoutePlanningMode(true);
mapActivity.getMapViewTrackingUtilities().switchToRoutePlanningMode();
mapActivity.refreshMap();
}
});
} }
private void initZooms() { private void initZooms() {
final OsmandMapTileView view = mapActivity.getMapView(); final OsmandMapTileView view = mapActivity.getMapView();
mapActivity.findViewById(id) View zoomInButton = mapActivity.findViewById(R.id.map_zoom_in_button);
controls.add(MapControl.create((ImageView) zoomInButton, R.drawable.ic_action_zoom_in).setRoundTransparent()
);
zoomInButton.setOnClickListener(new View.OnClickListener() { zoomInButton.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
@ -153,6 +293,9 @@ public class MapControlsLayer extends OsmandMapLayer {
}); });
final View.OnLongClickListener listener = MapZoomControls.getOnClickMagnifierListener(view); final View.OnLongClickListener listener = MapZoomControls.getOnClickMagnifierListener(view);
zoomInButton.setOnLongClickListener(listener); zoomInButton.setOnLongClickListener(listener);
View zoomOutButton = mapActivity.findViewById(R.id.map_zoom_out_button);
controls.add(MapControl.create((ImageView) zoomOutButton, R.drawable.ic_action_zoom_out).setRoundTransparent()
);
zoomOutButton.setOnClickListener(new View.OnClickListener() { zoomOutButton.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
@ -198,7 +341,7 @@ public class MapControlsLayer extends OsmandMapLayer {
@Override @Override
public void destroyLayer() { public void destroyLayer() {
controls.clear();
} }
@Override @Override
@ -246,7 +389,30 @@ public class MapControlsLayer extends OsmandMapLayer {
(zoomControls.getHeight() + zoomControls.getTotalVerticalMargin()) : 0; (zoomControls.getHeight() + zoomControls.getTotalVerticalMargin()) : 0;
rulerControl.setVerticalMargin(vmargin); rulerControl.setVerticalMargin(vmargin);
checkVisibilityAndDraw(true, rulerControl, canvas, tileBox, nightMode); checkVisibilityAndDraw(true, rulerControl, canvas, tileBox, nightMode);
///////////////////////////////////////////////
// new update
boolean enabled = mapActivity.getMyApplication().getLocationProvider().getLastKnownLocation() != null;
boolean tracked = mapActivity.getMapViewTrackingUtilities().isMapLinkedToLocation();
if (!enabled) {
backToLocationControl.setIconColorId(R.color.icon_color_light);
} else if (tracked) {
backToLocationControl.setIconColorId(R.color.color_distance);
} else {
backToLocationControl.setIconColorId(R.color.color_white);
} }
menuControl.setIconResId(mapActivity.getMyApplication().getSettings().USE_DASHBOARD_INSTEAD_OF_DRAWER.get() ?
R.drawable.ic_dashboard_dark : R.drawable.ic_navigation_drawer);
for(MapControl mc : controls) {
mc.update(mapActivity.getMyApplication(),
nightMode == null ? false : nightMode.isNightMode());
}
}
private void updatextColor(int textColor, int shadowColor, MapControls... mc) { private void updatextColor(int textColor, int shadowColor, MapControls... mc) {
for(MapControls m : mc) { for(MapControls m : mc) {
@ -264,7 +430,8 @@ public class MapControlsLayer extends OsmandMapLayer {
} }
} }
if(controls.isVisible()) { if(controls.isVisible()) {
controls.onDraw(canvas, tileBox, nightMode); // FIXME
// controls.onDraw(canvas, tileBox, nightMode);
} }
} }