2016-02-04 3 views
1

Я использую комбинированную диаграмму, чтобы нарисовать штабелированные полосы и линейную диаграмму поверх нее. Когда я устанавливаю тень панели в true, некоторые из них скрыты. Это код, который у меня есть, с тень тени, установленным в true.MPAndroidChart Bar Shadows скрывает фактические бары

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

Тот же самый код с баром тени установлен в ложном

combinedChart.setDrawBarShadow(false); 

производит следующую таблицу с решеткой вправо, как ожидалось.

enter image description here

Am я делать что-либо из того, здесь?

Если это ошибка, на которой я надеюсь, что нет, могу ли я получить тени в баре, используя линии сетки?

Большая библиотека все же.

ответ

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); 
     } 
    } 
} 

Надеется, что это помогает.

Смежные вопросы