From ec7d6e9ebe2373c53a627f2930e9f20c9b255eb5 Mon Sep 17 00:00:00 2001 From: Daniel Cohen Gindi Date: Sun, 10 Apr 2016 13:14:38 +0300 Subject: [PATCH 1/3] Added feature for drawing bar borders --- .../mikephil/charting/data/BarDataSet.java | 44 +++++++++++++++++++ .../realm/implementation/RealmBarDataSet.java | 44 +++++++++++++++++++ .../interfaces/datasets/IBarDataSet.java | 15 +++++++ .../charting/renderer/BarChartRenderer.java | 21 ++++++++- .../renderer/HorizontalBarChartRenderer.java | 12 ++++- 5 files changed, 132 insertions(+), 4 deletions(-) diff --git a/MPChartLib/src/com/github/mikephil/charting/data/BarDataSet.java b/MPChartLib/src/com/github/mikephil/charting/data/BarDataSet.java index fb1dccccf8..eed5785bb6 100644 --- a/MPChartLib/src/com/github/mikephil/charting/data/BarDataSet.java +++ b/MPChartLib/src/com/github/mikephil/charting/data/BarDataSet.java @@ -26,6 +26,10 @@ public class BarDataSet extends BarLineScatterCandleBubbleDataSet impl */ private int mBarShadowColor = Color.rgb(215, 215, 215); + private float mBarBorderWidth = 0.0f; + + private int mBarBorderColor = Color.BLACK; + /** * the alpha value used to draw the highlight indicator bar */ @@ -217,6 +221,46 @@ public int getBarShadowColor() { return mBarShadowColor; } + /** + * Sets the width used for drawing borders around the bars. + * If borderWidth == 0, no border will be drawn. + * + * @return + */ + public void setBarBorderWidth(float width) { + mBarBorderWidth = width; + } + + /** + * Returns the width used for drawing borders around the bars. + * If borderWidth == 0, no border will be drawn. + * + * @return + */ + @Override + public float getBarBorderWidth() { + return mBarBorderWidth; + } + + /** + * Sets the color drawing borders around the bars. + * + * @return + */ + public void setBarBorderColor(int color) { + mBarBorderColor = color; + } + + /** + * Returns the color drawing borders around the bars. + * + * @return + */ + @Override + public int getBarBorderColor() { + return mBarBorderColor; + } + /** * Set the alpha value (transparency) that is used for drawing the highlight * indicator bar. min = 0 (fully transparent), max = 255 (fully opaque) diff --git a/MPChartLib/src/com/github/mikephil/charting/data/realm/implementation/RealmBarDataSet.java b/MPChartLib/src/com/github/mikephil/charting/data/realm/implementation/RealmBarDataSet.java index 1b78c278cb..5fde69a4bd 100644 --- a/MPChartLib/src/com/github/mikephil/charting/data/realm/implementation/RealmBarDataSet.java +++ b/MPChartLib/src/com/github/mikephil/charting/data/realm/implementation/RealmBarDataSet.java @@ -34,6 +34,10 @@ public class RealmBarDataSet extends RealmBarLineScatterC */ private int mBarShadowColor = Color.rgb(215, 215, 215); + private float mBarBorderWidth = 0.0f; + + private int mBarBorderColor = Color.BLACK; + /** * the alpha value used to draw the highlight indicator bar */ @@ -212,6 +216,46 @@ public int getBarShadowColor() { return mBarShadowColor; } + /** + * Sets the width used for drawing borders around the bars. + * If borderWidth == 0, no border will be drawn. + * + * @return + */ + public void setBarBorderWidth(float width) { + mBarBorderWidth = width; + } + + /** + * Returns the width used for drawing borders around the bars. + * If borderWidth == 0, no border will be drawn. + * + * @return + */ + @Override + public float getBarBorderWidth() { + return mBarBorderWidth; + } + + /** + * Sets the color drawing borders around the bars. + * + * @return + */ + public void setBarBorderColor(int color) { + mBarBorderColor = color; + } + + /** + * Returns the color drawing borders around the bars. + * + * @return + */ + @Override + public int getBarBorderColor() { + return mBarBorderColor; + } + /** * Set the alpha value (transparency) that is used for drawing the highlight * indicator bar. min = 0 (fully transparent), max = 255 (fully opaque) diff --git a/MPChartLib/src/com/github/mikephil/charting/interfaces/datasets/IBarDataSet.java b/MPChartLib/src/com/github/mikephil/charting/interfaces/datasets/IBarDataSet.java index bc3bb9b3ea..e7c2f64355 100644 --- a/MPChartLib/src/com/github/mikephil/charting/interfaces/datasets/IBarDataSet.java +++ b/MPChartLib/src/com/github/mikephil/charting/interfaces/datasets/IBarDataSet.java @@ -37,6 +37,21 @@ public interface IBarDataSet extends IBarLineScatterCandleBubbleDataSet 0.f; float phaseX = mAnimator.getPhaseX(); float phaseY = mAnimator.getPhaseY(); @@ -125,11 +133,15 @@ protected void drawDataSet(Canvas c, IBarDataSet dataSet, int index) { break; // Set the color for the currently drawn value. If the index - // is - // out of bounds, reuse colors. + // is out of bounds, reuse colors. mRenderPaint.setColor(dataSet.getColor(j / 4)); c.drawRect(buffer.buffer[j], buffer.buffer[j + 1], buffer.buffer[j + 2], buffer.buffer[j + 3], mRenderPaint); + + if (drawBorder) { + c.drawRect(buffer.buffer[j], buffer.buffer[j + 1], buffer.buffer[j + 2], + buffer.buffer[j + 3], mBarBorderPaint); + } } } else { @@ -145,6 +157,11 @@ protected void drawDataSet(Canvas c, IBarDataSet dataSet, int index) { c.drawRect(buffer.buffer[j], buffer.buffer[j + 1], buffer.buffer[j + 2], buffer.buffer[j + 3], mRenderPaint); + + if (drawBorder) { + c.drawRect(buffer.buffer[j], buffer.buffer[j + 1], buffer.buffer[j + 2], + buffer.buffer[j + 3], mBarBorderPaint); + } } } } diff --git a/MPChartLib/src/com/github/mikephil/charting/renderer/HorizontalBarChartRenderer.java b/MPChartLib/src/com/github/mikephil/charting/renderer/HorizontalBarChartRenderer.java index facccc945c..41e1514d5d 100644 --- a/MPChartLib/src/com/github/mikephil/charting/renderer/HorizontalBarChartRenderer.java +++ b/MPChartLib/src/com/github/mikephil/charting/renderer/HorizontalBarChartRenderer.java @@ -52,6 +52,10 @@ protected void drawDataSet(Canvas c, IBarDataSet dataSet, int index) { Transformer trans = mChart.getTransformer(dataSet.getAxisDependency()); mShadowPaint.setColor(dataSet.getBarShadowColor()); + mBarBorderPaint.setColor(dataSet.getBarBorderColor()); + mBarBorderPaint.setStrokeWidth(dataSet.getBarBorderWidth()); + + final boolean drawBorder = dataSet.getBarBorderWidth() > 0.f; float phaseX = mAnimator.getPhaseX(); float phaseY = mAnimator.getPhaseY(); @@ -82,11 +86,15 @@ protected void drawDataSet(Canvas c, IBarDataSet dataSet, int index) { } // Set the color for the currently drawn value. If the index - // is - // out of bounds, reuse colors. + // is out of bounds, reuse colors. mRenderPaint.setColor(dataSet.getColor(j / 4)); c.drawRect(buffer.buffer[j], buffer.buffer[j + 1], buffer.buffer[j + 2], buffer.buffer[j + 3], mRenderPaint); + + if (drawBorder) { + c.drawRect(buffer.buffer[j], buffer.buffer[j + 1], buffer.buffer[j + 2], + buffer.buffer[j + 3], mBarBorderPaint); + } } } From 059d41adcdfe12b31459b0747e98cfca4c3a14d2 Mon Sep 17 00:00:00 2001 From: Daniel Cohen Gindi Date: Sun, 10 Apr 2016 13:15:46 +0300 Subject: [PATCH 2/3] Added bar borders to the demo --- MPChartExample/res/menu/bar.xml | 4 ++++ .../xxmassdeveloper/mpchartexample/AnotherBarActivity.java | 7 +++++++ .../xxmassdeveloper/mpchartexample/BarChartActivity.java | 7 +++++++ .../mpchartexample/BarChartActivityMultiDataset.java | 7 +++++++ .../mpchartexample/BarChartActivitySinus.java | 7 +++++++ .../mpchartexample/HorizontalBarChartActivity.java | 7 +++++++ .../xxmassdeveloper/mpchartexample/StackedBarActivity.java | 7 +++++++ .../mpchartexample/StackedBarActivityNegative.java | 7 +++++++ 8 files changed, 53 insertions(+) diff --git a/MPChartExample/res/menu/bar.xml b/MPChartExample/res/menu/bar.xml index 2cce21aacf..4b35e2ff5d 100644 --- a/MPChartExample/res/menu/bar.xml +++ b/MPChartExample/res/menu/bar.xml @@ -41,5 +41,9 @@ android:id="@+id/actionToggleAutoScaleMinMax" android:title="Toggle auto scale min/max"> + + \ No newline at end of file diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/AnotherBarActivity.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/AnotherBarActivity.java index cabd72e9dd..fe4f7a8381 100644 --- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/AnotherBarActivity.java +++ b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/AnotherBarActivity.java @@ -126,6 +126,13 @@ public boolean onOptionsItemSelected(MenuItem item) { mChart.notifyDataSetChanged(); break; } + case R.id.actionToggleBarBorders: { + for (IBarDataSet set : mChart.getData().getDataSets()) + ((BarDataSet)set).setBarBorderWidth(set.getBarBorderWidth() == 1.f ? 0.f : 1.f); + + mChart.invalidate(); + break; + } case R.id.actionToggleHighlightArrow: { if (mChart.isDrawHighlightArrowEnabled()) mChart.setDrawHighlightArrow(false); diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/BarChartActivity.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/BarChartActivity.java index 99d3d027fd..d097d5da9c 100644 --- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/BarChartActivity.java +++ b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/BarChartActivity.java @@ -167,6 +167,13 @@ public boolean onOptionsItemSelected(MenuItem item) { mChart.notifyDataSetChanged(); break; } + case R.id.actionToggleBarBorders: { + for (IBarDataSet set : mChart.getData().getDataSets()) + ((BarDataSet)set).setBarBorderWidth(set.getBarBorderWidth() == 1.f ? 0.f : 1.f); + + mChart.invalidate(); + break; + } case R.id.actionToggleHighlightArrow: { if (mChart.isDrawHighlightArrowEnabled()) mChart.setDrawHighlightArrow(false); diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/BarChartActivityMultiDataset.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/BarChartActivityMultiDataset.java index 4f869ecc3a..aa734146d8 100644 --- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/BarChartActivityMultiDataset.java +++ b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/BarChartActivityMultiDataset.java @@ -135,6 +135,13 @@ public boolean onOptionsItemSelected(MenuItem item) { mChart.notifyDataSetChanged(); break; } + case R.id.actionToggleBarBorders: { + for (IBarDataSet set : mChart.getData().getDataSets()) + ((BarDataSet)set).setBarBorderWidth(set.getBarBorderWidth() == 1.f ? 0.f : 1.f); + + mChart.invalidate(); + break; + } case R.id.actionToggleHighlight: { if(mChart.getData() != null) { mChart.getData().setHighlightEnabled(!mChart.getData().isHighlightEnabled()); diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/BarChartActivitySinus.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/BarChartActivitySinus.java index e200f2e9b1..d335fe7095 100644 --- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/BarChartActivitySinus.java +++ b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/BarChartActivitySinus.java @@ -151,6 +151,13 @@ public boolean onOptionsItemSelected(MenuItem item) { mChart.notifyDataSetChanged(); break; } + case R.id.actionToggleBarBorders: { + for (IBarDataSet set : mChart.getData().getDataSets()) + ((BarDataSet)set).setBarBorderWidth(set.getBarBorderWidth() == 1.f ? 0.f : 1.f); + + mChart.invalidate(); + break; + } case R.id.actionToggleHighlightArrow: { if (mChart.isDrawHighlightArrowEnabled()) mChart.setDrawHighlightArrow(false); diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/HorizontalBarChartActivity.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/HorizontalBarChartActivity.java index 3027188cf5..70a64eb7fc 100644 --- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/HorizontalBarChartActivity.java +++ b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/HorizontalBarChartActivity.java @@ -169,6 +169,13 @@ public boolean onOptionsItemSelected(MenuItem item) { mChart.notifyDataSetChanged(); break; } + case R.id.actionToggleBarBorders: { + for (IBarDataSet set : mChart.getData().getDataSets()) + ((BarDataSet)set).setBarBorderWidth(set.getBarBorderWidth() == 1.f ? 0.f : 1.f); + + mChart.invalidate(); + break; + } case R.id.actionToggleHighlightArrow: { if (mChart.isDrawHighlightArrowEnabled()) mChart.setDrawHighlightArrow(false); diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/StackedBarActivity.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/StackedBarActivity.java index 77c6d1f23f..6934711bb8 100644 --- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/StackedBarActivity.java +++ b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/StackedBarActivity.java @@ -140,6 +140,13 @@ public boolean onOptionsItemSelected(MenuItem item) { mChart.notifyDataSetChanged(); break; } + case R.id.actionToggleBarBorders: { + for (IBarDataSet set : mChart.getData().getDataSets()) + ((BarDataSet)set).setBarBorderWidth(set.getBarBorderWidth() == 1.f ? 0.f : 1.f); + + mChart.invalidate(); + break; + } case R.id.actionToggleHighlightArrow: { if (mChart.isDrawHighlightArrowEnabled()) mChart.setDrawHighlightArrow(false); diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/StackedBarActivityNegative.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/StackedBarActivityNegative.java index d25ee39f2b..ea33423354 100644 --- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/StackedBarActivityNegative.java +++ b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/StackedBarActivityNegative.java @@ -154,6 +154,13 @@ public boolean onOptionsItemSelected(MenuItem item) { mChart.notifyDataSetChanged(); break; } + case R.id.actionToggleBarBorders: { + for (IBarDataSet set : mChart.getData().getDataSets()) + ((BarDataSet)set).setBarBorderWidth(set.getBarBorderWidth() == 1.f ? 0.f : 1.f); + + mChart.invalidate(); + break; + } case R.id.actionToggleHighlightArrow: { if (mChart.isDrawHighlightArrowEnabled()) mChart.setDrawHighlightArrow(false); From 9a3fd0037084c1c99d0dcd1da2c71d87c07b58fa Mon Sep 17 00:00:00 2001 From: Daniel Cohen Gindi Date: Sun, 10 Apr 2016 13:16:16 +0300 Subject: [PATCH 3/3] Made these bar demos reuse the dataset and keep styling --- .../mpchartexample/AnotherBarActivity.java | 25 +++++--- .../mpchartexample/BarChartActivity.java | 25 +++++--- .../BarChartActivityMultiDataset.java | 57 ++++++++++++------- .../mpchartexample/BarChartActivitySinus.java | 27 ++++++--- .../BarChartPositiveNegative.java | 33 +++++++---- .../HorizontalBarChartActivity.java | 23 +++++--- .../mpchartexample/StackedBarActivity.java | 28 ++++++--- 7 files changed, 143 insertions(+), 75 deletions(-) diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/AnotherBarActivity.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/AnotherBarActivity.java index fe4f7a8381..5d5b933f57 100644 --- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/AnotherBarActivity.java +++ b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/AnotherBarActivity.java @@ -186,17 +186,26 @@ public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { xVals.add((int) yVals1.get(i).getVal() + ""); } - BarDataSet set1 = new BarDataSet(yVals1, "Data Set"); - set1.setColors(ColorTemplate.VORDIPLOM_COLORS); - set1.setDrawValues(false); + BarDataSet set1; - ArrayList dataSets = new ArrayList(); - dataSets.add(set1); + if (mChart.getData() != null && + mChart.getData().getDataSetCount() > 0) { + set1 = (BarDataSet)mChart.getData().getDataSetByIndex(0); + set1.setYVals(yVals1); + mChart.notifyDataSetChanged(); + } else { + set1 = new BarDataSet(yVals1, "Data Set"); + set1.setColors(ColorTemplate.VORDIPLOM_COLORS); + set1.setDrawValues(false); - BarData data = new BarData(xVals, dataSets); + ArrayList dataSets = new ArrayList(); + dataSets.add(set1); - mChart.setData(data); - mChart.invalidate(); + BarData data = new BarData(xVals, dataSets); + + mChart.setData(data); + mChart.invalidate(); + } } @Override diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/BarChartActivity.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/BarChartActivity.java index d097d5da9c..626890aa03 100644 --- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/BarChartActivity.java +++ b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/BarChartActivity.java @@ -245,17 +245,26 @@ private void setData(int count, float range) { yVals1.add(new BarEntry(val, i)); } - BarDataSet set1 = new BarDataSet(yVals1, "DataSet"); - set1.setBarSpacePercent(35f); + BarDataSet set1; - ArrayList dataSets = new ArrayList(); - dataSets.add(set1); + if (mChart.getData() != null && + mChart.getData().getDataSetCount() > 0) { + set1 = (BarDataSet)mChart.getData().getDataSetByIndex(0); + set1.setYVals(yVals1); + mChart.notifyDataSetChanged(); + } else { + set1 = new BarDataSet(yVals1, "DataSet"); + set1.setBarSpacePercent(35f); - BarData data = new BarData(xVals, dataSets); - data.setValueTextSize(10f); - data.setValueTypeface(mTf); + ArrayList dataSets = new ArrayList(); + dataSets.add(set1); - mChart.setData(data); + BarData data = new BarData(xVals, dataSets); + data.setValueTextSize(10f); + data.setValueTypeface(mTf); + + mChart.setData(data); + } } @SuppressLint("NewApi") diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/BarChartActivityMultiDataset.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/BarChartActivityMultiDataset.java index aa734146d8..1229828c4d 100644 --- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/BarChartActivityMultiDataset.java +++ b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/BarChartActivityMultiDataset.java @@ -211,30 +211,43 @@ public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { yVals3.add(new BarEntry(val, i)); } - // create 3 datasets with different types - BarDataSet set1 = new BarDataSet(yVals1, "Company A"); - // set1.setColors(ColorTemplate.createColors(getApplicationContext(), - // ColorTemplate.FRESH_COLORS)); - set1.setColor(Color.rgb(104, 241, 175)); - BarDataSet set2 = new BarDataSet(yVals2, "Company B"); - set2.setColor(Color.rgb(164, 228, 251)); - BarDataSet set3 = new BarDataSet(yVals3, "Company C"); - set3.setColor(Color.rgb(242, 247, 158)); - - ArrayList dataSets = new ArrayList(); - dataSets.add(set1); - dataSets.add(set2); - dataSets.add(set3); - - BarData data = new BarData(xVals, dataSets); + BarDataSet set1, set2, set3; + + if (mChart.getData() != null && + mChart.getData().getDataSetCount() > 0) { + set1 = (BarDataSet)mChart.getData().getDataSetByIndex(0); + set2 = (BarDataSet)mChart.getData().getDataSetByIndex(1); + set3 = (BarDataSet)mChart.getData().getDataSetByIndex(2); + set1.setYVals(yVals1); + set2.setYVals(yVals2); + set3.setYVals(yVals3); + mChart.notifyDataSetChanged(); + } else { + // create 3 datasets with different types + set1 = new BarDataSet(yVals1, "Company A"); + // set1.setColors(ColorTemplate.createColors(getApplicationContext(), + // ColorTemplate.FRESH_COLORS)); + set1.setColor(Color.rgb(104, 241, 175)); + set2 = new BarDataSet(yVals2, "Company B"); + set2.setColor(Color.rgb(164, 228, 251)); + set3 = new BarDataSet(yVals3, "Company C"); + set3.setColor(Color.rgb(242, 247, 158)); + + ArrayList dataSets = new ArrayList(); + dataSets.add(set1); + dataSets.add(set2); + dataSets.add(set3); + + BarData data = new BarData(xVals, dataSets); // data.setValueFormatter(new LargeValueFormatter()); - - // add space between the dataset groups in percent of bar-width - data.setGroupSpace(80f); - data.setValueTypeface(tf); - mChart.setData(data); - mChart.invalidate(); + // add space between the dataset groups in percent of bar-width + data.setGroupSpace(80f); + data.setValueTypeface(tf); + + mChart.setData(data); + mChart.invalidate(); + } } @Override diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/BarChartActivitySinus.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/BarChartActivitySinus.java index d335fe7095..b7d6dfd5aa 100644 --- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/BarChartActivitySinus.java +++ b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/BarChartActivitySinus.java @@ -223,16 +223,25 @@ private void setData(int count) { xVals.add(i+""); entries.add(mSinusData.get(i)); } - - BarDataSet set = new BarDataSet(entries, "Sinus Function"); - set.setBarSpacePercent(40f); - set.setColor(Color.rgb(240, 120, 124)); - BarData data = new BarData(xVals, set); - data.setValueTextSize(10f); - data.setValueTypeface(mTf); - data.setDrawValues(false); + BarDataSet set; + + if (mChart.getData() != null && + mChart.getData().getDataSetCount() > 0) { + set = (BarDataSet)mChart.getData().getDataSetByIndex(0); + set.setYVals(entries); + mChart.notifyDataSetChanged(); + } else { + set = new BarDataSet(entries, "Sinus Function"); + set.setBarSpacePercent(40f); + set.setColor(Color.rgb(240, 120, 124)); - mChart.setData(data); + BarData data = new BarData(xVals, set); + data.setValueTextSize(10f); + data.setValueTypeface(mTf); + data.setDrawValues(false); + + mChart.setData(data); + } } } diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/BarChartPositiveNegative.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/BarChartPositiveNegative.java index 26f8e6fceb..e028d5d2d7 100644 --- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/BarChartPositiveNegative.java +++ b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/BarChartPositiveNegative.java @@ -108,18 +108,27 @@ private void setData(List dataList) { colors.add(green); } - BarDataSet set = new BarDataSet(values, "Values"); - set.setBarSpacePercent(40f); - set.setColors(colors); - set.setValueTextColors(colors); - - BarData data = new BarData(dates, set); - data.setValueTextSize(13f); - data.setValueTypeface(mTf); - data.setValueFormatter(new ValueFormatter()); - - mChart.setData(data); - mChart.invalidate(); + BarDataSet set; + + if (mChart.getData() != null && + mChart.getData().getDataSetCount() > 0) { + set = (BarDataSet)mChart.getData().getDataSetByIndex(0); + set.setYVals(values); + mChart.notifyDataSetChanged(); + } else { + set = new BarDataSet(values, "Values"); + set.setBarSpacePercent(40f); + set.setColors(colors); + set.setValueTextColors(colors); + + BarData data = new BarData(dates, set); + data.setValueTextSize(13f); + data.setValueTypeface(mTf); + data.setValueFormatter(new ValueFormatter()); + + mChart.setData(data); + mChart.invalidate(); + } } /** diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/HorizontalBarChartActivity.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/HorizontalBarChartActivity.java index 70a64eb7fc..1dc016ac60 100644 --- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/HorizontalBarChartActivity.java +++ b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/HorizontalBarChartActivity.java @@ -242,16 +242,25 @@ private void setData(int count, float range) { yVals1.add(new BarEntry((float) (Math.random() * range), i)); } - BarDataSet set1 = new BarDataSet(yVals1, "DataSet 1"); + BarDataSet set1; - ArrayList dataSets = new ArrayList(); - dataSets.add(set1); + if (mChart.getData() != null && + mChart.getData().getDataSetCount() > 0) { + set1 = (BarDataSet)mChart.getData().getDataSetByIndex(0); + set1.setYVals(yVals1); + mChart.notifyDataSetChanged(); + } else { + set1 = new BarDataSet(yVals1, "DataSet 1"); - BarData data = new BarData(xVals, dataSets); - data.setValueTextSize(10f); - data.setValueTypeface(tf); + ArrayList dataSets = new ArrayList(); + dataSets.add(set1); - mChart.setData(data); + BarData data = new BarData(xVals, dataSets); + data.setValueTextSize(10f); + data.setValueTypeface(tf); + + mChart.setData(data); + } } @SuppressLint("NewApi") diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/StackedBarActivity.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/StackedBarActivity.java index 6934711bb8..1f8ef92129 100644 --- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/StackedBarActivity.java +++ b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/StackedBarActivity.java @@ -20,6 +20,7 @@ import com.github.mikephil.charting.data.BarDataSet; import com.github.mikephil.charting.data.BarEntry; import com.github.mikephil.charting.data.Entry; +import com.github.mikephil.charting.data.LineDataSet; import com.github.mikephil.charting.data.filter.Approximator; import com.github.mikephil.charting.data.filter.Approximator.ApproximatorType; import com.github.mikephil.charting.highlight.Highlight; @@ -201,18 +202,27 @@ public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { yVals1.add(new BarEntry(new float[] { val1, val2, val3 }, i)); } - BarDataSet set1 = new BarDataSet(yVals1, "Statistics Vienna 2014"); - set1.setColors(getColors()); - set1.setStackLabels(new String[] { "Births", "Divorces", "Marriages" }); + BarDataSet set1; - ArrayList dataSets = new ArrayList(); - dataSets.add(set1); + if (mChart.getData() != null && + mChart.getData().getDataSetCount() > 0) { + set1 = (BarDataSet)mChart.getData().getDataSetByIndex(0); + set1.setYVals(yVals1); + mChart.notifyDataSetChanged(); + } else { + set1 = new BarDataSet(yVals1, "Statistics Vienna 2014"); + set1.setColors(getColors()); + set1.setStackLabels(new String[]{"Births", "Divorces", "Marriages"}); + + ArrayList dataSets = new ArrayList(); + dataSets.add(set1); - BarData data = new BarData(xVals, dataSets); - data.setValueFormatter(new MyValueFormatter()); + BarData data = new BarData(xVals, dataSets); + data.setValueFormatter(new MyValueFormatter()); - mChart.setData(data); - mChart.invalidate(); + mChart.setData(data); + mChart.invalidate(); + } } @Override