From 7bba6a887fdfd69b44e039ff82ab4957292c82d2 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Tue, 5 Apr 2016 08:11:37 -0400 Subject: [PATCH] Increase width of chart labels as needed --- .../uhabits/views/HabitFrequencyView.java | 31 ++++++++++--- .../isoron/uhabits/views/HabitScoreView.java | 43 ++++++++++++++++--- 2 files changed, 62 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/org/isoron/uhabits/views/HabitFrequencyView.java b/app/src/main/java/org/isoron/uhabits/views/HabitFrequencyView.java index c3d47d9f0..55abb3959 100644 --- a/app/src/main/java/org/isoron/uhabits/views/HabitFrequencyView.java +++ b/app/src/main/java/org/isoron/uhabits/views/HabitFrequencyView.java @@ -51,7 +51,7 @@ public class HabitFrequencyView extends ScrollableDataView implements HabitDataV private int baseSize; private int paddingTop; - private int columnWidth; + private float columnWidth; private int columnHeight; private int nColumns; @@ -154,16 +154,33 @@ public class HabitFrequencyView extends ScrollableDataView implements HabitDataV baseSize = height / 8; setScrollerBucketSize(baseSize); - columnWidth = baseSize; - columnHeight = 8 * baseSize; - nColumns = width / baseSize; - paddingTop = 0; - pText.setTextSize(baseSize * 0.4f); pGraph.setTextSize(baseSize * 0.4f); pGraph.setStrokeWidth(baseSize * 0.1f); pGrid.setStrokeWidth(baseSize * 0.05f); em = pText.getFontSpacing(); + + columnWidth = baseSize; + columnWidth = Math.max(columnWidth, getMaxMonthWidth() * 1.2f); + + columnHeight = 8 * baseSize; + nColumns = (int) (width / columnWidth); + paddingTop = 0; + } + + private float getMaxMonthWidth() + { + float maxMonthWidth = 0; + GregorianCalendar day = DateHelper.getStartOfTodayCalendar(); + + for(int i = 0; i < 12; i++) + { + day.set(Calendar.MONTH, i); + float monthWidth = pText.measureText(dfMonth.format(day.getTime())); + maxMonthWidth = Math.max(maxMonthWidth, monthWidth); + } + + return maxMonthWidth; } public void refreshData() @@ -233,7 +250,7 @@ public class HabitFrequencyView extends ScrollableDataView implements HabitDataV for (int i = 0; i < 7; i++) { rect.set(0, 0, baseSize, baseSize); - rect.offset(prevRect.left, prevRect.top + columnWidth * i); + rect.offset(prevRect.left, prevRect.top + baseSize * i); if(values != null) drawMarker(canvas, rect, values[i]); diff --git a/app/src/main/java/org/isoron/uhabits/views/HabitScoreView.java b/app/src/main/java/org/isoron/uhabits/views/HabitScoreView.java index 2ce0371b1..4e1ae4c7c 100644 --- a/app/src/main/java/org/isoron/uhabits/views/HabitScoreView.java +++ b/app/src/main/java/org/isoron/uhabits/views/HabitScoreView.java @@ -60,7 +60,7 @@ public class HabitScoreView extends ScrollableDataView implements HabitDataView private int baseSize; private int paddingTop; - private int columnWidth; + private float columnWidth; private int columnHeight; private int nColumns; @@ -164,8 +164,11 @@ public class HabitScoreView extends ScrollableDataView implements HabitDataView setScrollerBucketSize(baseSize); columnWidth = baseSize; + columnWidth = Math.max(columnWidth, getMaxDayWidth() * 1.5f); + columnWidth = Math.max(columnWidth, getMaxMonthWidth() * 1.2f); + columnHeight = 8 * baseSize; - nColumns = width / baseSize; + nColumns = (int) (width / columnWidth); pGraph.setTextSize(baseSize * 0.5f); pGraph.setStrokeWidth(baseSize * 0.1f); @@ -341,15 +344,15 @@ public class HabitScoreView extends ScrollableDataView implements HabitDataView private void drawMarker(Canvas canvas, RectF rect) { - rect.inset(columnWidth * 0.15f, columnWidth * 0.15f); + rect.inset(baseSize * 0.15f, baseSize * 0.15f); setModeOrColor(pGraph, XFERMODE_CLEAR, Color.WHITE); canvas.drawOval(rect, pGraph); - rect.inset(columnWidth * 0.1f, columnWidth * 0.1f); + rect.inset(baseSize * 0.1f, baseSize * 0.1f); setModeOrColor(pGraph, XFERMODE_SRC, primaryColor); canvas.drawOval(rect, pGraph); - rect.inset(columnWidth * 0.1f, columnWidth * 0.1f); + rect.inset(baseSize * 0.1f, baseSize * 0.1f); setModeOrColor(pGraph, XFERMODE_CLEAR, Color.WHITE); canvas.drawOval(rect, pGraph); @@ -370,4 +373,34 @@ public class HabitScoreView extends ScrollableDataView implements HabitDataView else p.setColor(color); } + + private float getMaxMonthWidth() + { + float maxMonthWidth = 0; + GregorianCalendar day = DateHelper.getStartOfTodayCalendar(); + + for(int i = 0; i < 12; i++) + { + day.set(Calendar.MONTH, i); + float monthWidth = pText.measureText(dfMonth.format(day.getTime())); + maxMonthWidth = Math.max(maxMonthWidth, monthWidth); + } + + return maxMonthWidth; + } + + private float getMaxDayWidth() + { + float maxDayWidth = 0; + GregorianCalendar day = DateHelper.getStartOfTodayCalendar(); + + for(int i = 0; i < 28; i++) + { + day.set(Calendar.DAY_OF_MONTH, i); + float monthWidth = pText.measureText(dfMonth.format(day.getTime())); + maxDayWidth = Math.max(maxDayWidth, monthWidth); + } + + return maxDayWidth; + } }