Track appearance UI fixes second part

This commit is contained in:
Vitaliy 2020-09-01 12:38:53 +03:00
parent 053c4701ff
commit ee6e283d03
5 changed files with 53 additions and 12 deletions

View file

@ -230,8 +230,12 @@ public class UiUtilities {
}
@ColorInt
public static int mixTwoColors(@ColorInt int color1, @ColorInt int color2, float amount )
{
public static int removeAlpha(@ColorInt int color) {
return Color.rgb(Color.red(color), Color.green(color), Color.blue(color));
}
@ColorInt
public static int mixTwoColors(@ColorInt int color1, @ColorInt int color2, float amount) {
final byte ALPHA_CHANNEL = 24;
final byte RED_CHANNEL = 16;
final byte GREEN_CHANNEL = 8;

View file

@ -58,8 +58,12 @@ public class CustomColorBottomSheet extends MenuBottomSheetDialogFragment implem
} else {
Bundle args = getArguments();
if (args != null) {
prevColor = args.getInt(PREV_SELECTED_COLOR);
newColor = prevColor != -1 ? prevColor : Color.RED;
if (args.containsKey(PREV_SELECTED_COLOR)) {
prevColor = args.getInt(PREV_SELECTED_COLOR);
} else {
prevColor = Color.RED;
}
newColor = prevColor;
}
}

View file

@ -390,13 +390,21 @@ public class TrackAppearanceFragment extends ContextMenuScrollFragment implement
int strokeColor = UiUtilities.getColorWithAlpha(Color.BLACK, 0.7f);
Drawable strokeIcon = app.getUIUtilities().getPaintedIcon(strokeIconId, strokeColor);
Drawable transparencyIcon = getTransparencyIcon(app, widthAttr, color);
if (showArrows) {
int arrowsIconId = getArrowsIconId(widthAttr);
int contrastColor = UiUtilities.getContrastColor(app, color, false);
Drawable arrows = app.getUIUtilities().getPaintedIcon(arrowsIconId, contrastColor);
return UiUtilities.getLayeredIcon(widthIcon, strokeIcon, arrows);
return UiUtilities.getLayeredIcon(transparencyIcon, widthIcon, strokeIcon, arrows);
}
return UiUtilities.getLayeredIcon(widthIcon, strokeIcon);
return UiUtilities.getLayeredIcon(transparencyIcon, widthIcon, strokeIcon);
}
private Drawable getTransparencyIcon(OsmandApplication app, String widthAttr, @ColorInt int color) {
int transparencyIconId = getTransparencyIconId(widthAttr);
int colorWithoutAlpha = UiUtilities.removeAlpha(color);
int transparencyColor = UiUtilities.getColorWithAlpha(colorWithoutAlpha, 0.8f);
return app.getUIUtilities().getPaintedIcon(transparencyIconId, transparencyColor);
}
private void updateCardsLayout() {
@ -638,6 +646,16 @@ public class TrackAppearanceFragment extends ContextMenuScrollFragment implement
}
}
public static int getTransparencyIconId(String widthAttr) {
if (TRACK_WIDTH_BOLD.equals(widthAttr)) {
return R.drawable.ic_action_track_line_bold_transparency;
} else if (TRACK_WIDTH_MEDIUM.equals(widthAttr)) {
return R.drawable.ic_action_track_line_medium_transparency;
} else {
return R.drawable.ic_action_track_line_thin_transparency;
}
}
public static int getWidthIconId(String widthAttr) {
if (TRACK_WIDTH_BOLD.equals(widthAttr)) {
return R.drawable.ic_action_track_line_bold_color;

View file

@ -26,6 +26,7 @@ import net.osmand.PlatformUtil;
import net.osmand.plus.GPXDatabase;
import net.osmand.plus.GPXDatabase.GpxDataItem;
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.UiUtilities;
import net.osmand.plus.activities.MapActivity;
@ -143,7 +144,11 @@ public class TrackColoringCard extends BaseCard implements ColorPickerListener {
private View createColorItemView(@ColorInt final int color, final FlowLayout rootView, boolean customColor) {
View colorItemView = createCircleView(rootView);
ImageView backgroundCircle = colorItemView.findViewById(R.id.background);
backgroundCircle.setImageDrawable(UiUtilities.tintDrawable(AppCompatResources.getDrawable(app, R.drawable.bg_point_circle), color));
Drawable transparencyIcon = getTransparencyIcon(app, color);
Drawable colorIcon = app.getUIUtilities().getPaintedIcon(R.drawable.bg_point_circle, color);
Drawable layeredIcon = UiUtilities.getLayeredIcon(transparencyIcon, colorIcon);
backgroundCircle.setImageDrawable(layeredIcon);
backgroundCircle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@ -173,6 +178,12 @@ public class TrackColoringCard extends BaseCard implements ColorPickerListener {
return colorItemView;
}
private Drawable getTransparencyIcon(OsmandApplication app, @ColorInt int color) {
int colorWithoutAlpha = UiUtilities.removeAlpha(color);
int transparencyColor = UiUtilities.getColorWithAlpha(colorWithoutAlpha, 0.8f);
return app.getUIUtilities().getPaintedIcon(R.drawable.ic_bg_transparency, transparencyColor);
}
private View createAddCustomColorItemView(FlowLayout rootView) {
View colorItemView = createCircleView(rootView);
ImageView backgroundCircle = colorItemView.findViewById(R.id.background);
@ -183,7 +194,7 @@ public class TrackColoringCard extends BaseCard implements ColorPickerListener {
ImageView icon = colorItemView.findViewById(R.id.icon);
icon.setVisibility(View.VISIBLE);
int activeColorResId = nightMode ? R.color.icon_color_active_dark : R.color.icon_color_active_light;
icon.setImageDrawable(app.getUIUtilities().getIcon(R.drawable.ic_action_add, activeColorResId));
icon.setImageDrawable(app.getUIUtilities().getIcon(R.drawable.ic_action_plus, activeColorResId));
backgroundCircle.setImageDrawable(backgroundIcon);
backgroundCircle.setOnClickListener(new View.OnClickListener() {

View file

@ -456,12 +456,16 @@ public class GPXLayer extends OsmandMapLayer implements IContextMenuProvider, IM
int endX = (int) tileBox.getPixXFromLatLon(end.lat, end.lon);
int endY = (int) tileBox.getPixYFromLatLon(end.lat, end.lon);
QuadRect startRect = calculateRect(startX, startY, startPointIcon.getIntrinsicWidth(), startPointIcon.getIntrinsicHeight());
QuadRect endRect = calculateRect(endX, endY, finishPointIcon.getIntrinsicWidth(), finishPointIcon.getIntrinsicHeight());
int iconSize = AndroidUtils.dpToPx(view.getContext(), 14);
QuadRect startRectWithoutShadow = calculateRect(startX, startY, iconSize, iconSize);
QuadRect endRectWithoutShadow = calculateRect(endX, endY, iconSize, iconSize);
if (QuadRect.intersects(startRect, endRect)) {
drawPoint(canvas, startRect, startAndFinishIcon);
if (QuadRect.intersects(startRectWithoutShadow, endRectWithoutShadow)) {
QuadRect startAndFinishRect = calculateRect(startX, startY, startAndFinishIcon.getIntrinsicWidth(), startAndFinishIcon.getIntrinsicHeight());
drawPoint(canvas, startAndFinishRect, startAndFinishIcon);
} else {
QuadRect startRect = calculateRect(startX, startY, startPointIcon.getIntrinsicWidth(), startPointIcon.getIntrinsicHeight());
QuadRect endRect = calculateRect(endX, endY, finishPointIcon.getIntrinsicWidth(), finishPointIcon.getIntrinsicHeight());
drawPoint(canvas, startRect, startPointIcon);
drawPoint(canvas, endRect, finishPointIcon);
}