Ось X отображается неправильно с MPAndroidChart - PullRequest
1 голос
/ 10 апреля 2019

Я пытаюсь нарисовать диаграммы с помощью MPAndroidChart, но в верхней части диаграммы значения оси X отображаются неправильно, как показано на первом изображении.Когда я увеличиваю масштаб самой диаграммы, появляются значения оси X, как мы видим на втором изображении.

Можно ли правильно отобразить значения оси X сразу после загрузки макета?

Отображаемая диаграмма после загрузки макета фрагмента контейнера:

chart1

Диаграмма после увеличения:

chart2

РЕДАКТИРОВАТЬ: Следующий класс обрабатывает рисунок диаграммы:

public class Statistic {
    private BarChart barChart;
    private LineChart lineChart;
    private PieChart pieChart;
    private StatisticsViewModel statisticsViewModel;
    private ValueFormatter customValueFormatter;

    public Statistic(BarChart barChart, LineChart lineChart, PieChart pieChart) {
        this.barChart = barChart;
        this.lineChart = lineChart;
        this.pieChart = pieChart;
    }

    public void barChart(AxesStatisticsResult axesStatisticsResult) {

        barChart.fitScreen();
        barChart.clear();
        barChart.setDrawBarShadow(false);
        barChart.setDoubleTapToZoomEnabled(false);
        barChart.animateXY(1000, 1000);
        barChart.setDrawValueAboveBar(true);
        barChart.zoom(1.5f, 0, 0, 1.5f);
        barChart.setPinchZoom(false);
        barChart.setDrawGridBackground(true);

        ArrayList<BarEntry> barEntries = new ArrayList<>();

        barEntries = getBarEntryDataList(axesStatisticsResult);

        BarDataSet barDataSet = new BarDataSet(barEntries, "");
        barDataSet.setColors(ColorTemplate.COLORFUL_COLORS);
        barDataSet.setValueTextSize(10);

        BarData data = new BarData(barDataSet);
        barChart.setData(data);
        XAxis xAxis = barChart.getXAxis();
        xAxis.setTextSize(10);
        xAxis.setGranularityEnabled(true);// egységnyi beosztás
        xAxis.setGranularity(1f);
        xAxis.setValueFormatter(new IndexAxisValueFormatter(axesStatisticsResult.getStatisticsNameAsTmb()));
        xAxis.setPosition(XAxis.XAxisPosition.TOP);
        xAxis.setLabelRotationAngle(45);
    }

    public void lineChart(AxesStatisticsResult axesStatisticsResult) {
        lineChart.clear();
        lineChart.fitScreen();
        lineChart.setDragEnabled(true);
        lineChart.setScaleEnabled(true);
        lineChart.setDoubleTapToZoomEnabled(false);
        lineChart.setExtraTopOffset(30.0f);
        lineChart.animateXY(1000, 1000);

        LimitLine upper_limit = new LimitLine(axesStatisticsResult.getUpperExtremeFloatValue(), "Kiugróan magas");
        upper_limit.setLineWidth(4f);
        upper_limit.enableDashedLine(10f, 10f, 0f);
        upper_limit.setLabelPosition(LimitLine.LimitLabelPosition.RIGHT_BOTTOM);
        upper_limit.setTextSize(10f);

        LimitLine lower_limit = new LimitLine(axesStatisticsResult.getLowerExtremeFloatValue(), "Kiugróan alacsony");
        lower_limit.setLineWidth(4f);
        lower_limit.enableDashedLine(10f, 10f, 0f);
        lower_limit.setLabelPosition(LimitLine.LimitLabelPosition.RIGHT_BOTTOM);
        lower_limit.setTextSize(10f);

        YAxis leftAxis = lineChart.getAxisLeft();
        leftAxis.removeAllLimitLines();
        leftAxis.addLimitLine(upper_limit);
        leftAxis.addLimitLine(lower_limit);
        leftAxis.enableGridDashedLine(10f, 10f, 0);
        leftAxis.setDrawLimitLinesBehindData(true);

        lineChart.getAxisRight().setEnabled(false);

        ArrayList<Entry> yValues = new ArrayList<>();
        yValues = getLineChartDataList(axesStatisticsResult);

        LineDataSet set1 = new LineDataSet(yValues, "");

        set1.setFillAlpha(110);

        set1.setColor(Color.BLUE);
        set1.setLineWidth(3f);
        set1.setValueTextSize(15f);
        set1.setValueTextColor(Color.DKGRAY);

        ArrayList<ILineDataSet> dataSets = new ArrayList<>();
        dataSets.add(set1);

        LineData data = new LineData(dataSets);

        lineChart.setData(data);

        XAxis xAxis = lineChart.getXAxis();
        xAxis.setGranularityEnabled(true);
        xAxis.setGranularity(1f);
        xAxis.setTextSize(10);
        xAxis.setValueFormatter(new IndexAxisValueFormatter(axesStatisticsResult.getStatisticsNameAsTmb()));
        xAxis.setPosition(XAxis.XAxisPosition.TOP);
        xAxis.setDrawGridLines(true);
        xAxis.setLabelCount(25);

        xAxis.setLabelRotationAngle(45);
    }

    public void pieChart(AxesStatisticsResult axesStatisticsResult) {

        pieChart.clear();
        lineChart.fitScreen();
        pieChart.setUsePercentValues(true);
        pieChart.getDescription().setEnabled(false);
        pieChart.setExtraOffsets(5, 10, 5, 5);
        pieChart.setDragDecelerationFrictionCoef(0.99f);
        pieChart.setDrawHoleEnabled(false);
        pieChart.setHoleColor(Color.WHITE);
        pieChart.setTransparentCircleRadius(61f);
        pieChart.animateY(1000, Easing.EaseInCubic);

        ArrayList<PieEntry> yValues = new ArrayList<>();

        yValues = getPieEntryDataList(axesStatisticsResult);

        PieDataSet dataSet = new PieDataSet(yValues, " ");
        dataSet.setSliceSpace(1f);
        dataSet.setSelectionShift(5f);
        dataSet.setColors(ColorTemplate.JOYFUL_COLORS);

        PieData data = new PieData(dataSet);
        data.setValueTextSize(20f);
        data.setValueTextColor(Color.DKGRAY);

        pieChart.setData(data);
    }

    private ArrayList<Entry> getLineChartDataList(AxesStatisticsResult axesStatisticsResult) {
        ArrayList<Entry> entryArrayList = new ArrayList<>();

        for (int i = 0; i < axesStatisticsResult.size(); i++) {
            entryArrayList.add(new Entry(i, axesStatisticsResult.get(i).getSingleStatisticsFloatValue()));
        }
        return entryArrayList;
    }

    private ArrayList<PieEntry> getPieEntryDataList(AxesStatisticsResult axesStatisticsResult) {
        ArrayList<PieEntry> pieEntryArrayList = new ArrayList<>();
        ArrayList<PieEntry> yValues = new ArrayList<>();
        for (int i = 0; i < axesStatisticsResult.size(); i++) {
            pieEntryArrayList.add(new PieEntry(axesStatisticsResult.get(i).getSingleStatisticsFloatValue(), axesStatisticsResult.get(i).getSingleStatisticsName() + " %"));
        }
        return pieEntryArrayList;
    }

    private ArrayList<BarEntry> getBarEntryDataList(AxesStatisticsResult axesStatisticsResult) {
        ArrayList<BarEntry> barEntryArrayList = new ArrayList<>();

        for (int i = 0; i < axesStatisticsResult.size(); i++) {
            barEntryArrayList.add(new BarEntry(i, axesStatisticsResult.get(i).getSingleStatisticsFloatValue()));
        }
        return barEntryArrayList;
    }
}

...