Я использую MPAndroidChart и хочу создать гистограмму. На самом деле это работает нормально. Но проблема в этикетках на разных полосках. Как-то они просто не совпадают. Только если у меня ровно 3 полоски, метки отображаются правильно. Здесь вы можете увидеть картинку:

Вот код Java для Android:
import android.graphics.Color; импортировать android.graphics.Typeface; импортировать android.os.Bundle; импортировать android.view.LayoutInflater; импортировать android.view.View; импортировать android.view.ViewGroup; импортировать androidx.fragment.app.Fragment; импортировать com.example.drinkserver.databinding.FragmentTestBinding; импортировать com.github.mikephil.charting.comComponents.LimitLine; импортировать com.github.mikephil.charting.comComponents.XAxis; импортировать com.github.mikephil.charting.comComponents.YAxis; импортировать com.github.mikephil.charting.data.BarData; импортировать com.github.mikephil.charting.data.BarDataSet; импортировать com.github.mikephil.charting.data.BarEntry; импортировать com.github.mikephil.charting.formatter.IndexAxisValueFormatter; импортировать java.util.ArrayList; импортировать java.util.List; общественный класс FR_Test расширяет фрагмент { общественный FR_Test() { // Требуемый пустой публичный конструктор } @Override public void onCreate (Bundle saveInstanceState) { super.onCreate(saveInstanceState); } частная привязка FragmentTestBinding; @Override public View onCreateView (инфлятор LayoutInflater, контейнер ViewGroup, Пакет saveInstanceState) { привязка = FragmentTestBinding.inflate(инфлятор, контейнер, ложь); /* Создавайте гистограммы с помощью MP Android Chart */ //Добавляем точки данных ArrayList dataVals = новый ArrayList(); dataVals.add(новый BarEntry(1, 3)); //dataVals.add(new BarEntry(2, 4)); //dataVals.add(new BarEntry(3, 5)); //dataVals.add(new BarEntry(4, 3)); // Создаем BarDataSet с данными BarDataSet barDataSet = новый BarDataSet(dataVals, ""); barDataSet.setDrawValues (истина); barDataSet.setValueTextColor(Color.BLACK); // Настраиваем внешний вид баров barDataSet.setColors(Color.rgb(0, 155, 0)); // Устанавливаем цвет полосы // Создаём BarData и добавляем в него свой BarDataSet BarData barData = новый BarData(barDataSet); barData.setBarWidth(0.6f); // Получаем XAxis XAxis xAxis =binding.barChartRatings.getXAxis(); xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); xAxis.setDrawAxisLine(истина); xAxis.setDrawGridLines(ложь); xAxis.setTextSize(10f); xAxis.setTypeface(Typeface.DEFAULT_BOLD); // Добавляем метки для баров List barLabels = новый ArrayList(); barLabels.add(""); for (int i = 0; i < dataVals.size(); i++) { barLabels.add("Бар " + (i + 1)); } // Преобразуем список в массив окончательная String[] barLabelsA = barLabels.toArray(new String[0]); // Устанавливаем пользовательские метки для оси X xAxis.setValueFormatter(новый IndexAxisValueFormatter(barLabelsA)); // Получаем ось Y (левая ось) YAxis leftYAxis =binding.barChartRatings.getAxisLeft(); leftYAxis.setDrawLabels (истина); leftYAxis.setDrawGridLines(истина); leftYAxis.setAxisMinimum(0f); leftYAxis.setAxisMaximum(5.5f); leftYAxis.setGranularity(1f); // Устанавливаем количество меток, не заставляя их быть целыми числами leftYAxis.setLabelCount(6, ложь); leftYAxis.setTextSize(14f); // Создаем LimitLine для верхнего края LimitLine UpperRim = новая LimitLine(5.5f, ""); UpperRim.setLineColor(Color.BLACK); UpperRim.setLineWidth(1f); // Добавляем верхний край к левой оси Y leftYAxis.addLimitLine(upperRim); // Получаем ось Y и скрываем ее YAxis rightYAxis =binding.barChartRatings.getAxisRight(); rightYAxis.setDrawLabels (ложь); rightYAxis.setDrawGridLines(ложь); // Добавляем на график непрерывный верхний край привязка.barChartRatings.getAxisRight().setDrawTopYLabelEntry(true); привязка.barChartRatings.getAxisLeft().setDrawTopYLabelEntry(true); // Удаляем легенду привязка.barChartRatings.getLegend().setEnabled(false); // Скрываем метку описания привязка.barChartRatings.getDescription().setEnabled(false); // Устанавливаем данные для гистограммы привязка.barChartRatings.setData(barData); // Делаем диаграмму недействительной, чтобы обновить ее внешний вид привязка.barChartRatings.invalidate(); вернуть привязку.getRoot(); } } и соответствующий файл макета XML:
List barLabels = new ArrayList(); всегда содержит правильное количество строк столбцов. Таким образом, при наличии только одной точки данных она имеет пустую строку «» (так что метки столбцов не отображаются в позиции 0) и «Bar1». Так что довольно странно, почему «Бар1» повторяется 3 раза. Что делает проблему еще более странной, так это то, что при наличии другого количества баров поведение меняется, хотя barLabels всегда имеет правильное количество строк. Знаете ли вы, что вызывает эту проблему?