7
7
import android .graphics .Path ;
8
8
import android .util .AttributeSet ;
9
9
10
+ import com .github .mikephil .charting .data .ChartData ;
11
+ import com .github .mikephil .charting .data .DataSet ;
10
12
import com .github .mikephil .charting .data .Entry ;
11
13
import com .github .mikephil .charting .data .LineData ;
12
14
import com .github .mikephil .charting .data .LineDataSet ;
15
+ import com .github .mikephil .charting .utils .FillFormatter ;
13
16
14
17
import java .util .ArrayList ;
15
18
@@ -26,6 +29,8 @@ public class LineChart extends BarLineChartBase<LineData> {
26
29
/** paint for the inner circle of the value indicators */
27
30
protected Paint mCirclePaintInner ;
28
31
32
+ private FillFormatter mFillFormatter ;
33
+
29
34
public LineChart (Context context ) {
30
35
super (context );
31
36
}
@@ -42,6 +47,8 @@ public LineChart(Context context, AttributeSet attrs, int defStyle) {
42
47
protected void init () {
43
48
super .init ();
44
49
50
+ mFillFormatter = new DefaultFillFormatter ();
51
+
45
52
mCirclePaintInner = new Paint (Paint .ANTI_ALIAS_FLAG );
46
53
mCirclePaintInner .setStyle (Paint .Style .FILL );
47
54
mCirclePaintInner .setColor (Color .WHITE );
@@ -263,9 +270,9 @@ && isOffContentBottom(valuePoints[j + 1]))
263
270
264
271
// mRenderPaint.setShader(dataSet.getShader());
265
272
266
- float fillMin = dataSet . getYMin () >= 0 ? mYChartMin : 0 ;
267
-
268
- Path filled = generateFilledPath ( entries , fillMin );
273
+ Path filled = generateFilledPath ( entries ,
274
+ mFillFormatter . getFillLinePosition ( dataSet , mOriginalData , mYChartMax ,
275
+ mYChartMin ) );
269
276
270
277
transformPath (filled );
271
278
@@ -469,4 +476,45 @@ public Paint getPaint(int which) {
469
476
470
477
return null ;
471
478
}
479
+
480
+ /**
481
+ * Default formatter that calculates the position of the filled line.
482
+ *
483
+ * @author Philipp Jahoda
484
+ */
485
+ private class DefaultFillFormatter implements FillFormatter {
486
+
487
+ @ Override
488
+ public float getFillLinePosition (LineDataSet dataSet , LineData data ,
489
+ float chartMaxY , float chartMinY ) {
490
+
491
+ float fillMin = 0f ;
492
+
493
+ if (dataSet .getYMax () > 0 && dataSet .getYMin () < 0 ) {
494
+ fillMin = 0f ;
495
+ } else {
496
+
497
+ if (!mStartAtZero ) {
498
+
499
+ float max , min ;
500
+
501
+ if (data .getYMax () > 0 )
502
+ max = 0f ;
503
+ else
504
+ max = chartMaxY ;
505
+ if (data .getYMin () < 0 )
506
+ min = 0f ;
507
+ else
508
+ min = chartMinY ;
509
+
510
+ fillMin = dataSet .getYMin () >= 0 ? min : max ;
511
+ } else {
512
+ fillMin = 0f ;
513
+ }
514
+
515
+ }
516
+
517
+ return fillMin ;
518
+ }
519
+ }
472
520
}
0 commit comments