2016-02-04 106 views
1

我正在使用组合图表来绘制堆积酒吧和它的顶部的折线图。 当我将栏阴影设置为true时,一些栏被隐藏。 这是我将bar阴影设置为true的代码。MPAndroidChart酒吧阴影隐藏实际酒吧

public void setupChart(CombinedChart combinedChart) 
{ 

    combinedChart.setDrawOrder(new CombinedChart.DrawOrder[]{CombinedChart.DrawOrder.BAR, CombinedChart.DrawOrder.LINE}); 
    combinedChart.setNoDataText(""); 
    combinedChart.setNoDataTextDescription(""); 
    combinedChart.setDescription(null); 
    combinedChart.setDrawGridBackground(false); 
    combinedChart.setDrawBarShadow(true); 
    combinedChart.setBackgroundColor(getResources().getColor(R.color.transparent)); 

    XAxisValueFormatter customX=new MyXAxisValueFormatter(); 

    XAxis xAxis=combinedChart.getXAxis(); 
    xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); 
    xAxis.setDrawAxisLine(false); 
    xAxis.setDrawLabels(true); 
    xAxis.setDrawGridLines(false); 
    xAxis.setGridColor(getResources().getColor(R.color.Gray)); 
    xAxis.setValueFormatter(customX); 
    xAxis.setSpaceBetweenLabels(2); 

    YAxisValueFormatter customY=new MyYAxisValueFormatter(); 

    YAxis leftAxis=combinedChart.getAxisLeft(); 
    leftAxis.setLabelCount(4, false); 
    leftAxis.setDrawAxisLine(false); 
    leftAxis.setDrawGridLines(false); 
    leftAxis.setValueFormatter(customY); 
    leftAxis.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART); 
    leftAxis.setSpaceTop(15f); 

    YAxis rightAxis=combinedChart.getAxisRight(); 
    rightAxis.setEnabled(false); 

    combinedChart.getLegend().setEnabled(false); 
} 

我也得到了下面的图表

enter image description here

相同的代码与酒吧阴影设置为false

combinedChart.setDrawBarShadow(false); 

产生与杆如下图右预期。

enter image description here

我在做什么出格的顺序吗?

如果这是一个我不希望的错误,我可以使用网格线实现条形阴影吗?

很好的图书馆。

回答

0

感谢Phil。我通过GitHub得到了答复。我想下一个版本中应该解决这个问题。但是这是需要在BarChartRenderer类中更新的方法。

它基本上是平的实际条之前的阴影绘制

protected void drawDataSet(Canvas c, IBarDataSet dataSet, int index) { 

    Transformer trans = mChart.getTransformer(dataSet.getAxisDependency()); 

    mShadowPaint.setColor(dataSet.getBarShadowColor()); 

    float phaseX = mAnimator.getPhaseX(); 
    float phaseY = mAnimator.getPhaseY(); 

    // initialize the buffer 
    BarBuffer buffer = mBarBuffers[index]; 
    buffer.setPhases(phaseX, phaseY); 
    buffer.setBarSpace(dataSet.getBarSpace()); 
    buffer.setDataSet(index); 
    buffer.setInverted(mChart.isInverted(dataSet.getAxisDependency())); 

    buffer.feed(dataSet); 

    trans.pointValuesToPixel(buffer.buffer); 

    // draw the bar shadow before the values 
    if (mChart.isDrawBarShadowEnabled()) { 

     for (int j = 0; j < buffer.size(); j += 4) { 

      if (!mViewPortHandler.isInBoundsLeft(buffer.buffer[j + 2])) 
       continue; 

      if (!mViewPortHandler.isInBoundsRight(buffer.buffer[j])) 
       break; 

      c.drawRect(buffer.buffer[j], mViewPortHandler.contentTop(), 
        buffer.buffer[j + 2], 
        mViewPortHandler.contentBottom(), mShadowPaint); 
     } 
    } 

    // if multiple colors 
    if (dataSet.getColors().size() > 1) { 

     for (int j = 0; j < buffer.size(); j += 4) { 

      if (!mViewPortHandler.isInBoundsLeft(buffer.buffer[j + 2])) 
       continue; 

      if (!mViewPortHandler.isInBoundsRight(buffer.buffer[j])) 
       break; 

      // Set the color for the currently drawn value. If the index 
      // 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); 
     } 
    } else { 

     mRenderPaint.setColor(dataSet.getColor()); 

     for (int j = 0; j < buffer.size(); j += 4) { 

      if (!mViewPortHandler.isInBoundsLeft(buffer.buffer[j + 2])) 
       continue; 

      if (!mViewPortHandler.isInBoundsRight(buffer.buffer[j])) 
       break; 

      c.drawRect(buffer.buffer[j], buffer.buffer[j + 1], buffer.buffer[j + 2], 
        buffer.buffer[j + 3], mRenderPaint); 
     } 
    } 
} 

希望这有助于。