2016-02-04 182 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); 
     } 
    } 
} 

希望這有助於。