14
14
import com .github .mikephil .charting .charts .BarChart ;
15
15
import com .github .mikephil .charting .components .AxisBase ;
16
16
import com .github .mikephil .charting .components .Legend ;
17
- import com .github .mikephil .charting .components .Legend .LegendPosition ;
18
17
import com .github .mikephil .charting .components .XAxis ;
19
18
import com .github .mikephil .charting .components .YAxis ;
20
19
import com .github .mikephil .charting .data .BarData ;
@@ -46,6 +45,7 @@ protected void onCreate(Bundle savedInstanceState) {
46
45
setContentView (R .layout .activity_barchart );
47
46
48
47
tvX = (TextView ) findViewById (R .id .tvXMax );
48
+ tvX .setTextSize (10 );
49
49
tvY = (TextView ) findViewById (R .id .tvYMax );
50
50
51
51
mSeekBarX = (SeekBar ) findViewById (R .id .seekBar1 );
@@ -59,7 +59,7 @@ protected void onCreate(Bundle savedInstanceState) {
59
59
mChart .getDescription ().setEnabled (false );
60
60
61
61
// mChart.setDrawBorders(true);
62
-
62
+
63
63
// scaling can now only be done on x- and y-axis separately
64
64
mChart .setPinchZoom (false );
65
65
@@ -83,14 +83,15 @@ protected void onCreate(Bundle savedInstanceState) {
83
83
l .setDrawInside (true );
84
84
l .setTypeface (mTfLight );
85
85
l .setYOffset (0f );
86
+ l .setXOffset (10f );
86
87
l .setYEntrySpace (0f );
87
88
l .setTextSize (8f );
88
89
89
- XAxis xl = mChart .getXAxis ();
90
- xl .setTypeface (mTfLight );
91
- xl .setGranularity (1f );
92
- xl .setCenterAxisLabels (true );
93
- xl .setValueFormatter (new IAxisValueFormatter () {
90
+ XAxis xAxis = mChart .getXAxis ();
91
+ xAxis .setTypeface (mTfLight );
92
+ xAxis .setGranularity (1f );
93
+ xAxis .setCenterAxisLabels (true );
94
+ xAxis .setValueFormatter (new IAxisValueFormatter () {
94
95
@ Override
95
96
public String getFormattedValue (float value , AxisBase axis ) {
96
97
return String .valueOf ((int ) value );
@@ -106,7 +107,7 @@ public int getDecimalDigits() {
106
107
leftAxis .setTypeface (mTfLight );
107
108
leftAxis .setValueFormatter (new LargeValueFormatter ());
108
109
leftAxis .setDrawGridLines (false );
109
- leftAxis .setSpaceTop (30f );
110
+ leftAxis .setSpaceTop (35f );
110
111
leftAxis .setAxisMinimum (0f ); // this replaces setStartAtZero(true)
111
112
112
113
mChart .getAxisRight ().setEnabled (false );
@@ -145,13 +146,13 @@ public boolean onOptionsItemSelected(MenuItem item) {
145
146
}
146
147
case R .id .actionToggleBarBorders : {
147
148
for (IBarDataSet set : mChart .getData ().getDataSets ())
148
- ((BarDataSet )set ).setBarBorderWidth (set .getBarBorderWidth () == 1.f ? 0.f : 1.f );
149
+ ((BarDataSet ) set ).setBarBorderWidth (set .getBarBorderWidth () == 1.f ? 0.f : 1.f );
149
150
150
151
mChart .invalidate ();
151
152
break ;
152
153
}
153
154
case R .id .actionToggleHighlight : {
154
- if (mChart .getData () != null ) {
155
+ if (mChart .getData () != null ) {
155
156
mChart .getData ().setHighlightEnabled (!mChart .getData ().isHighlightEnabled ());
156
157
mChart .invalidate ();
157
158
}
@@ -171,7 +172,6 @@ public boolean onOptionsItemSelected(MenuItem item) {
171
172
break ;
172
173
}
173
174
case R .id .animateXY : {
174
-
175
175
mChart .animateXY (3000 , 3000 );
176
176
break ;
177
177
}
@@ -182,92 +182,85 @@ public boolean onOptionsItemSelected(MenuItem item) {
182
182
@ Override
183
183
public void onProgressChanged (SeekBar seekBar , int progress , boolean fromUser ) {
184
184
185
- float groupSpace = 0.04f ;
186
- float barSpace = 0.02f ; // x3 dataset
187
- float barWidth = 0.3f ; // x3 dataset
188
- // (0.3 + 0.02 ) * 3 + 0.04 = 1.00 -> interval per "group"
185
+ float groupSpace = 0.08f ;
186
+ float barSpace = 0.03f ; // x4 DataSet
187
+ float barWidth = 0.2f ; // x4 DataSet
188
+ // (0.2 + 0.03 ) * 4 + 0.08 = 1.00 -> interval per "group"
189
189
190
+ int groupCount = mSeekBarX .getProgress () + 1 ;
190
191
int startYear = 1980 ;
191
- int endYear = startYear + mSeekBarX . getProgress () ;
192
+ int endYear = startYear + groupCount ;
192
193
193
- tvX .setText (startYear + "\n -" + endYear );
194
+ tvX .setText (startYear + "-" + endYear );
194
195
tvY .setText ("" + (mSeekBarY .getProgress ()));
195
196
196
197
ArrayList <BarEntry > yVals1 = new ArrayList <BarEntry >();
197
198
ArrayList <BarEntry > yVals2 = new ArrayList <BarEntry >();
198
199
ArrayList <BarEntry > yVals3 = new ArrayList <BarEntry >();
200
+ ArrayList <BarEntry > yVals4 = new ArrayList <BarEntry >();
199
201
200
- float mult = mSeekBarY .getProgress () * 100000f ;
202
+ float randomMultiplier = mSeekBarY .getProgress () * 100000f ;
201
203
202
204
for (int i = startYear ; i < endYear ; i ++) {
203
- float val = (float ) (Math .random () * mult ) + 3 ;
204
- yVals1 .add (new BarEntry (i , val ));
205
+ yVals1 .add (new BarEntry (i , (float ) (Math .random () * randomMultiplier )));
206
+ yVals2 .add (new BarEntry (i , (float ) (Math .random () * randomMultiplier )));
207
+ yVals3 .add (new BarEntry (i , (float ) (Math .random () * randomMultiplier )));
208
+ yVals4 .add (new BarEntry (i , (float ) (Math .random () * randomMultiplier )));
205
209
}
206
210
207
- for (int i = startYear ; i < endYear ; i ++) {
208
- float val = (float ) (Math .random () * mult ) + 3 ;
209
- yVals2 .add (new BarEntry (i , val ));
210
- }
211
-
212
- for (int i = startYear ; i < endYear ; i ++) {
213
- float val = (float ) (Math .random () * mult ) + 3 ;
214
- yVals3 .add (new BarEntry (i , val ));
215
- }
211
+ BarDataSet set1 , set2 , set3 , set4 ;
216
212
217
- BarDataSet set1 , set2 , set3 ;
213
+ if ( mChart . getData () != null && mChart . getData (). getDataSetCount () > 0 ) {
218
214
219
- if (mChart .getData () != null &&
220
- mChart .getData ().getDataSetCount () > 0 ) {
221
- set1 = (BarDataSet )mChart .getData ().getDataSetByIndex (0 );
222
- set2 = (BarDataSet )mChart .getData ().getDataSetByIndex (1 );
223
- set3 = (BarDataSet )mChart .getData ().getDataSetByIndex (2 );
215
+ set1 = (BarDataSet ) mChart .getData ().getDataSetByIndex (0 );
216
+ set2 = (BarDataSet ) mChart .getData ().getDataSetByIndex (1 );
217
+ set3 = (BarDataSet ) mChart .getData ().getDataSetByIndex (2 );
218
+ set4 = (BarDataSet ) mChart .getData ().getDataSetByIndex (3 );
224
219
set1 .setValues (yVals1 );
225
220
set2 .setValues (yVals2 );
226
221
set3 .setValues (yVals3 );
222
+ set4 .setValues (yVals4 );
227
223
mChart .getData ().notifyDataChanged ();
228
224
mChart .notifyDataSetChanged ();
225
+
229
226
} else {
230
- // create 3 datasets with different types
227
+ // create 4 DataSets
231
228
set1 = new BarDataSet (yVals1 , "Company A" );
232
- // set1.setColors(ColorTemplate.createColors(getApplicationContext(),
233
- // ColorTemplate.FRESH_COLORS));
234
229
set1 .setColor (Color .rgb (104 , 241 , 175 ));
235
230
set2 = new BarDataSet (yVals2 , "Company B" );
236
231
set2 .setColor (Color .rgb (164 , 228 , 251 ));
237
232
set3 = new BarDataSet (yVals3 , "Company C" );
238
233
set3 .setColor (Color .rgb (242 , 247 , 158 ));
234
+ set4 = new BarDataSet (yVals4 , "Company D" );
235
+ set4 .setColor (Color .rgb (255 , 102 , 0 ));
239
236
240
- ArrayList <IBarDataSet > dataSets = new ArrayList <IBarDataSet >();
241
- dataSets .add (set1 );
242
- dataSets .add (set2 );
243
- dataSets .add (set3 );
244
-
245
- BarData data = new BarData (dataSets );
237
+ BarData data = new BarData (set1 , set2 , set3 , set4 );
246
238
data .setValueFormatter (new LargeValueFormatter ());
247
-
248
- // add space between the dataset groups in percent of bar-width
249
239
data .setValueTypeface (mTfLight );
250
240
251
241
mChart .setData (data );
252
242
}
253
243
244
+ // specify the width each bar should have
254
245
mChart .getBarData ().setBarWidth (barWidth );
246
+
247
+ // restrict the x-axis range
255
248
mChart .getXAxis ().setAxisMinimum (startYear );
256
- mChart .getXAxis ().setAxisMaximum (mChart .getBarData ().getGroupWidth (groupSpace , barSpace ) * mSeekBarX .getProgress () + startYear );
249
+
250
+ // barData.getGroupWith(...) is a helper that calculates the width each group needs based on the provided parameters
251
+ mChart .getXAxis ().setAxisMaximum (startYear + mChart .getBarData ().getGroupWidth (groupSpace , barSpace ) * groupCount );
257
252
mChart .groupBars (startYear , groupSpace , barSpace );
258
253
mChart .invalidate ();
259
254
}
260
255
261
256
@ Override
262
257
public void onStartTrackingTouch (SeekBar seekBar ) {
263
258
// TODO Auto-generated method stub
264
-
265
259
}
266
260
267
261
@ Override
268
262
public void onStopTrackingTouch (SeekBar seekBar ) {
269
263
// TODO Auto-generated method stub
270
-
271
264
}
272
265
273
266
@ Override
0 commit comments