@@ -80,11 +80,12 @@ public void drawData(Canvas c) {
80
80
}
81
81
}
82
82
83
+ private RectF mBarShadowRectBuffer = new RectF ();
84
+
83
85
protected void drawDataSet (Canvas c , IBarDataSet dataSet , int index ) {
84
86
85
87
Transformer trans = mChart .getTransformer (dataSet .getAxisDependency ());
86
88
87
- mShadowPaint .setColor (dataSet .getBarShadowColor ());
88
89
mBarBorderPaint .setColor (dataSet .getBarBorderColor ());
89
90
mBarBorderPaint .setStrokeWidth (Utils .convertDpToPixel (dataSet .getBarBorderWidth ()));
90
91
@@ -93,34 +94,53 @@ protected void drawDataSet(Canvas c, IBarDataSet dataSet, int index) {
93
94
float phaseX = mAnimator .getPhaseX ();
94
95
float phaseY = mAnimator .getPhaseY ();
95
96
96
- // initialize the buffer
97
- BarBuffer buffer = mBarBuffers [index ];
98
- buffer .setPhases (phaseX , phaseY );
99
- buffer .setDataSet (index );
100
- buffer .setInverted (mChart .isInverted (dataSet .getAxisDependency ()));
101
- buffer .setBarWidth (mChart .getBarData ().getBarWidth ());
97
+ // draw the bar shadow before the values
98
+ if (mChart .isDrawBarShadowEnabled ()) {
99
+ mShadowPaint .setColor (dataSet .getBarShadowColor ());
102
100
103
- buffer . feed ( dataSet );
101
+ BarData barData = mChart . getBarData ( );
104
102
105
- trans .pointValuesToPixel (buffer .buffer );
103
+ final float barWidth = barData .getBarWidth ();
104
+ final float barWidthHalf = barWidth / 2.0f ;
105
+ float x ;
106
106
107
- // draw the bar shadow before the values
108
- if (mChart .isDrawBarShadowEnabled ()) {
107
+ for (int i = 0 , count = Math .min ((int )(Math .ceil ((float )(dataSet .getEntryCount ()) * phaseX )), dataSet .getEntryCount ());
108
+ i < count ;
109
+ i ++) {
110
+
111
+ BarEntry e = dataSet .getEntryForIndex (i );
109
112
110
- for ( int j = 0 ; j < buffer . size (); j += 4 ) {
113
+ x = e . getX ();
111
114
112
- if (!mViewPortHandler .isInBoundsLeft (buffer .buffer [j + 2 ]))
115
+ mBarShadowRectBuffer .left = x - barWidthHalf ;
116
+ mBarShadowRectBuffer .right = x + barWidthHalf ;
117
+
118
+ trans .rectValueToPixel (mBarShadowRectBuffer );
119
+
120
+ if (!mViewPortHandler .isInBoundsLeft (mBarShadowRectBuffer .right ))
113
121
continue ;
114
122
115
- if (!mViewPortHandler .isInBoundsRight (buffer . buffer [ j ] ))
123
+ if (!mViewPortHandler .isInBoundsRight (mBarShadowRectBuffer . left ))
116
124
break ;
117
125
118
- c .drawRect (buffer .buffer [j ], mViewPortHandler .contentTop (),
119
- buffer .buffer [j + 2 ],
120
- mViewPortHandler .contentBottom (), mShadowPaint );
126
+ mBarShadowRectBuffer .top = mViewPortHandler .contentTop ();
127
+ mBarShadowRectBuffer .bottom = mViewPortHandler .contentBottom ();
128
+
129
+ c .drawRect (mBarShadowRectBuffer , mShadowPaint );
121
130
}
122
131
}
123
132
133
+ // initialize the buffer
134
+ BarBuffer buffer = mBarBuffers [index ];
135
+ buffer .setPhases (phaseX , phaseY );
136
+ buffer .setDataSet (index );
137
+ buffer .setInverted (mChart .isInverted (dataSet .getAxisDependency ()));
138
+ buffer .setBarWidth (mChart .getBarData ().getBarWidth ());
139
+
140
+ buffer .feed (dataSet );
141
+
142
+ trans .pointValuesToPixel (buffer .buffer );
143
+
124
144
final boolean isSingleColor = dataSet .getColors ().size () == 1 ;
125
145
126
146
if (isSingleColor ) {
0 commit comments