目录
使用MPAndroidChart实现K线图(1)——基本用法
使用MPAndroidChart实现K线图(2)——自定义XY轴
使用MPAndroidChart实现K线图(3)——自定义柱状图
使用MPAndroidChart实现K线图(4)——图表联动、加载更多
使用MPAndroidChart实现K线图(5)——高亮联动、横竖屏切换
重写BarChart渲染器BarChartRenderer
柱状图BarChart的数据集BarDataSet虽然有setColors(int... colors)方法来设置多种颜色,但默认情况下,只有第一种颜色会被使用,并不能实现K线中的红涨绿跌。接下来,自定义BarChart的渲染器OffsetBarRenderer,继承BarChartRenderer,重写绘制方法drawDataSet()。
查看BarChartRenderer的源码,在drawDataSet(Canvas c, IBarDataSet dataSet, int index)方法的靠后部分,可以找到绘制Bar的语句:
c.drawRect(buffer.buffer[j], buffer.buffer[j + 1], buffer.buffer[j + 2],
buffer.buffer[j + 3], mRenderPaint);
由此可知:BarChart在绘制Bar时,Bar的位置和大小由buffer控制,颜色由mRenderPaint控制。因此,要改变Bar的颜色,只需根据数据集,给mRenderPaint设置对应的颜色即可。
//父类中的mBarShadowRectBuffer为私有类,不能继承,需要复制过来
private RectF mBarShadowRectBuffer = new RectF();
@Override
protected void drawDataSet(Canvas c, IBarDataSet dataSet, int index) {
Transformer trans = mChart.getTransformer(dataSet.getAxisDependency());
mBarBorderPaint.setColor(dataSet.getBarBorderColor());
mBarBorderPaint.setStrokeWidth(Utils.convertDpToPixel(dataSet.getBarBorderWidth()));
final boolean drawBorder = dataSet.getBarBorderWidth() > 0.f;
float phaseX = mAnimator.getPhaseX();
float phaseY = mAnimator.getPhaseY();
// draw the bar shadow before the values
if (mChart.isDrawBarShadowEnabled()) {
mShadowPaint.setColor(dataSet.