package com.github.mikephil.charting.renderer; import com.github.mikephil.charting.data.BarData; import com.github.mikephil.charting.data.Entry; import com.github.mikephil.charting.interfaces.ChartInterface; import java.util.ArrayList; public class ColumnToBarTransformer extends Transformer { /** * Prepares the matrix that transforms values to pixels. * * @param chart */ @Override public void prepareMatrixValuePx(ChartInterface chart) { float scaleX = (chart.getWidth() - chart.getOffsetRight() - chart.getOffsetLeft()) / chart.getDeltaY(); float scaleY = (chart.getHeight() - chart.getOffsetTop() - chart.getOffsetBottom()) / chart.getDeltaX(); // setup all matrices mMatrixValueToPx.reset(); mMatrixValueToPx.postTranslate(0, -chart.getYChartMin()); mMatrixValueToPx.postScale(scaleX, -scaleY); } /** * Transforms an arraylist of Entry into a float array containing the x and * y values transformed with all matrices for the BARCHART. * * @param entries * @param dataSet the dataset index * @return */ public float[] generateTransformedValuesBarChart(ArrayList<? extends Entry> entries, int dataSet, BarData bd, float phaseY) { float[] valuePoints = new float[entries.size() * 2]; int setCount = bd.getDataSetCount(); float space = bd.getGroupSpace(); for (int j = 0; j < valuePoints.length; j += 2) { int index = j/2; Entry e = entries.get(index); //TODO: Need to find a better value than 1, should be dependant on yMax, I think float x = e.getVal() + 1; // calculate the y-position, depending on datasetcount float y = e.getXIndex() + (index * (setCount - 1)) + dataSet + 0.5f + space * index + space / 2f; valuePoints[j] = x; valuePoints[j + 1] = y; } pointValuesToPixel(valuePoints); return valuePoints; } }