Kaynağa Gözat

BarGraphView updates - support for custom colors

Berislav 9 yıl önce
ebeveyn
işleme
d1764a09df

+ 1 - 1
.idea/misc.xml

@@ -37,7 +37,7 @@
     <ConfirmationsSetting value="0" id="Add" />
     <ConfirmationsSetting value="0" id="Remove" />
   </component>
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
     <output url="file://$PROJECT_DIR$/build/classes" />
   </component>
   <component name="ProjectType">

+ 74 - 30
app/src/main/java/hr/tacitus/graphs/BarGraphView.java

@@ -35,10 +35,15 @@ public class BarGraphView extends View {
     private String noDataText;
 
     private Paint averageLinePaint = null;
-    private Paint canvasPaint = null;
     private Paint axisPaint = null;
     private Paint textPaint = null;
 
+    private int textColor = Color.BLACK;
+    private int valueTextColor = Color.BLACK;
+    private int barColor = Color.parseColor("#81E5F0");
+    private int lineAverageColor = Color.RED;
+    private int axisColor = Color.BLACK;
+
     private DisplayMetrics dm = null;
 
     private BarGraphAdapter adapter;
@@ -140,6 +145,12 @@ public class BarGraphView extends View {
                 if (a.hasValue(R.styleable.BarGraph_noDataText))
                     noDataText = a.getString(R.styleable.BarGraph_noDataText);
 
+                textColor = a.getColor(R.styleable.BarGraph_textColor, textColor);
+                valueTextColor = a.getColor(R.styleable.BarGraph_valueTextColor, valueTextColor);
+                barColor = a.getColor(R.styleable.BarGraph_barColor, barColor);
+                lineAverageColor = a.getColor(R.styleable.BarGraph_lineAverageColor, lineAverageColor);
+                axisColor = a.getColor(R.styleable.BarGraph_axisColor, axisColor);
+
             } finally {
                 a.recycle();
             }
@@ -149,22 +160,17 @@ public class BarGraphView extends View {
     private void cacheValues() {
         // Initialize paints used in onDraw
         averageLinePaint = new Paint();
-        averageLinePaint.setColor(Color.RED);
+        averageLinePaint.setColor(lineAverageColor);
         averageLinePaint.setStrokeWidth(getDimensionFromDp(AVERAGE_LINE_STROKE_WIDTH));
 
-        canvasPaint = new Paint();
-        canvasPaint.setStyle(Paint.Style.FILL);
-        canvasPaint.setColor(Color.WHITE);
-        // canvasPaint.setAntiAlias(true);
-
         axisPaint = new Paint();
         axisPaint.setStyle(Paint.Style.FILL);
-        axisPaint.setColor(Color.BLACK);
+        axisPaint.setColor(axisColor);
         axisPaint.setAntiAlias(true);
 
         textPaint = new Paint();
         textPaint.setStyle(Paint.Style.FILL);
-        textPaint.setColor(Color.BLACK);
+        textPaint.setColor(textColor);
         textPaint.setAntiAlias(true);
         textPaint.setTextSize(getDimensionFromSp(NO_DATA_TEXT_SIZE_SP));
     }
@@ -217,8 +223,6 @@ public class BarGraphView extends View {
     protected void onDraw(Canvas canvas) {
         super.onDraw(canvas);
 
-        canvas.drawPaint(canvasPaint);
-
         if (adapter == null) {
             drawNoDataText(canvas);
             return;
@@ -245,12 +249,12 @@ public class BarGraphView extends View {
 
             if (x1 <= getWidth() - getPaddingRight()) {
                 if (x1 >= verticalAxisRect.getWidth() + getPaddingLeft()) {
-                    canvas.drawLine(x1, y1, x2, y2, horizontalAxisRect.getPaintLine());
+                    canvas.drawLine(x1, y1, x2, y2, axisPaint);
                     if (horizontalAxisRect.isShowValues()) {
                         String horizontalDescription = adapter.getHorizontalValueDescription(i);
                         if (horizontalDescription != null) {
-                            float textWidth = horizontalAxisRect.getPaintLine().measureText(horizontalDescription);
-                            canvas.drawText(horizontalDescription, x1 - (textWidth / 2), horizontalAxisRect.getMarkingValuesY(), horizontalAxisRect.getPaintLine());
+                            float textWidth = horizontalAxisRect.getPaintMarkingsText().measureText(horizontalDescription);
+                            canvas.drawText(horizontalDescription, x1 - (textWidth / 2), horizontalAxisRect.getMarkingValuesY(), horizontalAxisRect.getPaintMarkingsText());
                         }
                     }
                 }
@@ -279,7 +283,7 @@ public class BarGraphView extends View {
             float y1 = yStart;
             float y2 = y1;
 
-            canvas.drawLine(x1, y1, x2, y2, verticalAxisRect.getPaintLine());
+            canvas.drawLine(x1, y1, x2, y2, axisPaint);
 
             if (verticalAxisRect.isShowValues()) {
                 // draw bounding rect before rotating text
@@ -287,10 +291,10 @@ public class BarGraphView extends View {
                 canvas.save();
 
                 String markingText = adapter.getVerticalMarkingText(i * verticalAxisValues.getYieldBetweenMarkings());
-                float textWidth = verticalAxisRect.getPaintLine().measureText(markingText);
+                float textWidth = verticalAxisRect.getPaintMarkingsText().measureText(markingText);
 
                 canvas.rotate(-90.f, rect.exactCenterX(), yStart + rect.exactCenterY());
-                canvas.drawText(markingText, -(textWidth / 2), yStart + verticalAxisRect.getValuesX() + getPaddingLeft(), verticalAxisRect.getPaintLine());
+                canvas.drawText(markingText, -(textWidth / 2), yStart + verticalAxisRect.getValuesX() + getPaddingLeft(), verticalAxisRect.getPaintMarkingsText());
                 canvas.restore();
             }
 
@@ -448,7 +452,7 @@ public class BarGraphView extends View {
             // max vrijednost unutar Data arraya, max vrijednost podataka koje imamo
             maxDataValue = getDataMaxValue();
             String maxValueFormatted = adapter.getVerticalMarkingText(maxDataValue);
-            float maxValueTextWidth = verticalAxisRect.getPaintLine().measureText(maxValueFormatted);
+            float maxValueTextWidth = verticalAxisRect.getPaintMarkingsText().measureText(maxValueFormatted);
             verticalAxisValues.setMinDistanceBetweenMarkings(maxValueTextWidth);
 
             // max vrijednost grafa, ovisi o max vrijednosti data arraya, ali nije
@@ -685,6 +689,46 @@ public class BarGraphView extends View {
         this.noDataText = noDataText;
     }
 
+    public int getTextColor() {
+        return textColor;
+    }
+
+    public void setTextColor(int textColor) {
+        this.textColor = textColor;
+    }
+
+    public int getValueTextColor() {
+        return valueTextColor;
+    }
+
+    public void setValueTextColor(int valueTextColor) {
+        this.valueTextColor = valueTextColor;
+    }
+
+    public int getBarColor() {
+        return barColor;
+    }
+
+    public void setBarColor(int barColor) {
+        this.barColor = barColor;
+    }
+
+    public int getLineAverageColor() {
+        return lineAverageColor;
+    }
+
+    public void setLineAverageColor(int lineAverageColor) {
+        this.lineAverageColor = lineAverageColor;
+    }
+
+    public int getAxisColor() {
+        return axisColor;
+    }
+
+    public void setAxisColor(int axisColor) {
+        this.axisColor = axisColor;
+    }
+
     private class BarConfig {
         private float padding;
         private float whiteSpace;
@@ -695,11 +739,11 @@ public class BarGraphView extends View {
         public void init() {
             float fontSize = barFontSizePx;
             paintRect = new Paint();
-            paintRect.setColor(Color.parseColor("#81E5F0"));
+            paintRect.setColor(barColor);
             paintRect.setAntiAlias(true);
 
             paintText = new Paint();
-            paintText.setColor(Color.parseColor("#000000"));
+            paintText.setColor(valueTextColor);
             paintText.setAntiAlias(true);
             paintText.setTextSize(fontSize);
 
@@ -757,7 +801,7 @@ public class BarGraphView extends View {
         float fontSize;
         float axisMarkingsLength;
 
-        Paint paintLine = null;
+        Paint paintMarkingsText = null;
         Paint paintDescription = null;
 
         boolean showValues = true;
@@ -767,21 +811,21 @@ public class BarGraphView extends View {
             fontSize = axisValuesFontSizePx;
             axisMarkingsLength = getDimensionFromDp(DEFAULT_MARKINGS_LENGTH_DP);
 
-            paintLine = new Paint();
-            paintLine.setAntiAlias(true);
-            paintLine.setColor(Color.BLACK);
-            paintLine.setTextSize(fontSize);
+            paintMarkingsText = new Paint();
+            paintMarkingsText.setAntiAlias(true);
+            paintMarkingsText.setColor(textColor);
+            paintMarkingsText.setTextSize(fontSize);
 
             paintDescription = new Paint();
             paintDescription.setAntiAlias(true);
-            paintDescription.setColor(Color.BLACK);
+            paintDescription.setColor(textColor);
             paintDescription.setTextSize(getDimensionFromSp(DEFAULT_AXIS_DESCRIPTION_FONT_SIZE_SP));
 
             lineSpacing = getDimensionFromDp(DEFAULT_AXIS_LINE_SPACING_DP);
         }
 
-        public Paint getPaintLine() {
-            return paintLine;
+        public Paint getPaintMarkingsText() {
+            return paintMarkingsText;
         }
 
         public float getFontSize() {
@@ -820,7 +864,7 @@ public class BarGraphView extends View {
 
         public int getTextHeight() {
             Rect bounds = new Rect();
-            paintLine.getTextBounds("0", 0, 1, bounds);
+            paintMarkingsText.getTextBounds("0", 0, 1, bounds);
             return bounds.height();
         }
 
@@ -849,7 +893,7 @@ public class BarGraphView extends View {
 
         public float getWidth() {
             float res = getAxisLeft();
-            res += paintLine.getStrokeWidth();
+            res += paintMarkingsText.getStrokeWidth();
             return res;
         }
 

+ 9 - 1
app/src/main/res/values/attrs.xml

@@ -1,4 +1,6 @@
 <resources>
+    <attr name="textColor" format="color" />
+
     <declare-styleable name="BarGraph">
         <attr name="xAxisText" format="string" />
         <attr name="yAxisText" format="string" />
@@ -9,11 +11,17 @@
         <attr name="showVerticalValues" format="boolean" />
         <attr name="showHorizontalValues" format="boolean" />
         <attr name="noDataText" format="string" />
+
+        <attr name="textColor" />
+        <attr name="valueTextColor" format="color" />
+        <attr name="barColor" format="color" />
+        <attr name="lineAverageColor" format="color" />
+        <attr name="axisColor" format="color" />
     </declare-styleable>
 
     <declare-styleable name="PieChartView">
         <attr name="title" format="string" />
-        <attr name="textColor" format="color" />
+        <attr name="textColor" />
         <attr name="showLegend" format="boolean" />
     </declare-styleable>
 </resources>

+ 11 - 11
graphsapp/src/main/java/hr/tacitus/graphsapp/MainActivity.java

@@ -23,19 +23,19 @@ public class MainActivity extends AppCompatActivity {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
 
-//        bgv = (BarGraphView) findViewById(R.id.bgvGraf);
-//        updateAdapter();
+        bgv = (BarGraphView) findViewById(R.id.bgvGraf);
+        updateAdapter();
 
         // float[] values = {12.5f, 50.0f, 25f, 12.5f};
-        pieChartView = (PieChartView) findViewById(R.id.pieChart);
-        pieChartView.setColorProvider(new PieChartColorProvider() {
-            int[] colors = {Color.RED, Color.YELLOW, Color.parseColor("#f47142")};
-            @Override
-            public int getColor(int position) {
-                return colors[position];
-            }
-        });
-        updateAdapter();
+//        pieChartView = (PieChartView) findViewById(R.id.pieChart);
+//        pieChartView.setColorProvider(new PieChartColorProvider() {
+//            int[] colors = {Color.RED, Color.YELLOW, Color.parseColor("#f47142")};
+//            @Override
+//            public int getColor(int position) {
+//                return colors[position];
+//            }
+//        });
+        // updateAdapter();
     }
 
     public void toggleAdapter(View view) {

+ 22 - 16
graphsapp/src/main/res/layout/activity_main.xml

@@ -19,25 +19,31 @@
             android:text="Toggle Adapter" />
     </LinearLayout>
 
-    <hr.tacitus.graphs.PieChartView
+    <!--<hr.tacitus.graphs.PieChartView-->
+        <!--android:layout_below="@id/toolbar"-->
+        <!--android:layout_width="match_parent"-->
+        <!--android:layout_height="match_parent"-->
+        <!--android:id="@+id/pieChart"-->
+        <!--app:title="Some testing"-->
+        <!--app:textColor="#ffffff"-->
+        <!--/>-->
+
+
+    <hr.tacitus.graphs.BarGraphView
+        android:background="?android:colorBackground"
         android:layout_below="@id/toolbar"
+        android:id="@+id/bgvGraf"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:id="@+id/pieChart"
-        app:title="Some testing"
-        app:textColor="#ffffff"
+        android:paddingTop="42dp"
+        android:paddingLeft="6dp"
+        android:paddingBottom="6dp"
+        android:paddingRight="6dp"
+        app:textColor="@android:color/darker_gray"
+        app:showAverageLine="true"
+        app:barColor="@android:color/holo_blue_dark"
+        app:valueTextColor="@android:color/white"
+        app:axisColor="@android:color/darker_gray"
         />
 
-
-    <!--<hr.tacitus.graphs.BarGraphView-->
-        <!--android:layout_below="@id/toolbar"-->
-        <!--android:id="@+id/bgvGraf"-->
-        <!--android:layout_width="0dp"-->
-        <!--android:layout_height="0dp"-->
-        <!--android:paddingTop="42dp"-->
-        <!--android:paddingLeft="6dp"-->
-        <!--android:paddingBottom="6dp"-->
-        <!--android:paddingRight="6dp"-->
-        <!--/>-->
-
 </RelativeLayout>