Ранее я задавал вопрос об использовании CustomFormatLabeler в библиотеке GraphView для отображения времени в виде x-меток (https://stackoverflow.com/questions/21567853/using-customlabelformatter-to-display-time-in-x-axis). Я до сих пор не могу найти решение, поэтому я попытался отредактировать библиотеку GraphView. Я попробовал решение, предложенное здесь: Использование дат с библиотекой Graphview
Я изменил:
public GraphViewData(double valueX, double valueY)
как было предложено путем добавления третьей входной переменной (String valueDate) и метода с именем getTime(), который возвращает это строковое значение. Затем я изменил generateHorlabels, как показано ниже:
private String[] generateHorlabels(float graphwidth) {
int numLabels = getGraphViewStyle().getNumHorizontalLabels()-1;
if (numLabels < 0) {
numLabels = (int) (graphwidth/(horLabelTextWidth*2));
}
String[] labels = new String[numLabels+1];
double min = getMinX(false);
double max = getMaxX(false);
for (int i=0; i<=numLabels; i++) {
Double temp = min + ((max-min)*i/numLabels);
int rounded =(int)Math.round(temp)-1;
if(rounded < 0){
labels[i] = " ";
}else{
if(graphSeries.size() > 0){
GraphViewDataInterface[] values = graphSeries.get(0).values;
if(values.length > rounded){
labels[i] = values[rounded].getTime();
}else{
labels[i] = " ";
}
}
}
}
return labels;
}
Мне пришлось вычесть 1 из округленной переменной, потому что я выходил за пределы ошибки. Это работает лучше, чем этикетировщик пользовательского формата, поскольку нет задержки между горизонтальными метками и реальным временем. Однако после примерно 600 точек данных
rounded
становится больше длины
values
и я получаю ошибку за пределами границ. Кто-нибудь пробовал модифицировать библиотеку GraphView для успешного отображения времени? Я новичок в программировании на Java и Android, поэтому некоторые советы были бы отличными. Спасибо за чтение.