Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ class ScalebarActivity : AppCompatActivity() {
.setTextSize(20f)
.setBarHeight(15f)
.setBorderWidth(5f)
.setMetricUnit(true)
.setRefreshInterval(15)
.setMarginTop(15f)
.setMarginLeft(16f)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,12 @@

class ScaleBarConstants {
static double FEET_PER_METER = 3.2808;
static int KILOMETER = 1000;
static int FEET_PER_MILE = 5280;
static String METER_UNIT = " m";
static String FEET_UNIT = " ft";
static String KILOMETER_UNIT = " km";
static String MILE_UNIT = " mile";
static ArrayList<Pair<Integer, Integer>> metricTable = new ArrayList<Pair<Integer, Integer>>() {
{
add(new Pair<>(1, 2));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,14 @@
import android.view.View;

import java.lang.ref.WeakReference;
import java.text.DecimalFormat;
import java.util.ArrayList;

import static com.mapbox.pluginscalebar.ScaleBarConstants.FEET_PER_MILE;
import static com.mapbox.pluginscalebar.ScaleBarConstants.KILOMETER;
import static com.mapbox.pluginscalebar.ScaleBarConstants.KILOMETER_UNIT;
import static com.mapbox.pluginscalebar.ScaleBarConstants.MILE_UNIT;

/**
* The scale widget is a visual representation of the scale bar plugin.
*/
Expand All @@ -37,6 +43,7 @@ public class ScaleBarWidget extends View {
private ArrayList<Pair<Integer, Integer>> scaleTable;
private String unit;
private final RefreshHandler refreshHandler;
private DecimalFormat decimalFormat = new DecimalFormat("0.0");

ScaleBarWidget(@NonNull Context context) {
super(context);
Expand Down Expand Up @@ -90,7 +97,7 @@ protected void onDraw(Canvas canvas) {
int i = 0;
for (; i < pair.second; i++) {
barPaint.setColor(i % 2 == 0 ? primaryColor : secondaryColor);
String text = i == 0 ? String.valueOf(unitDistance * i) : unitDistance * i + unit;
String text = i == 0 ? String.valueOf(unitDistance * i) : getDistanceText(unitDistance * i);
canvas.drawText(text,
marginLeft + unitBarWidth * i,
textSize + marginTop,
Expand All @@ -101,7 +108,7 @@ protected void onDraw(Canvas canvas) {
textBarMargin + textSize + marginTop + barHeight,
barPaint);
}
canvas.drawText(unitDistance * i + unit,
canvas.drawText(getDistanceText(unitDistance * i),
marginLeft + unitBarWidth * i,
textSize + marginTop,
textPaint);
Expand Down Expand Up @@ -341,6 +348,21 @@ void setMapViewWidth(int mapViewWidth) {
maxBarWidth = mapViewWidth / 2f - marginLeft;
}

/**
* Get the formatted distance text according unit and distance
* @param distance original distance
* @return Formatted distance text
*/
private String getDistanceText(int distance) {
if (ScaleBarConstants.METER_UNIT.equals(unit)) {
return distance < KILOMETER ? distance + unit
: decimalFormat.format(distance * 1.0 / KILOMETER) + KILOMETER_UNIT;
} else {
return distance < FEET_PER_MILE ? distance + unit
: decimalFormat.format(distance * 1.0 / FEET_PER_MILE) + MILE_UNIT;
}
}

/**
* Handler class to limit the refresh frequent.
*/
Expand Down