我正在使用MPAndroidChart
在android中绘制一些图表。我面临的问题是以下代码以异步方式执行。 E.g:
Log.d("Starting data load","Starting data load");
x1.setValueFormatter(new GraphXAxisValueFormatter(xLabels_nl,chart));
chart.setData(data);
chart.fitScreen();
Log.d("Finished data load","Finished data load");
setValueFormatter
已启动setValueFormatter
仍在运行问题是,当setValueFormatter
仍在运行时,如果第二次执行了所描述的代码,则图表不会zoom/drag
正确地指向它的初始位置。
有没有办法等到第二次启动时"x1.setValueFormatter(new GraphXAxisValueFormatter(xLabels_nl,chart));"
的第一次执行完成?
GraphXAxisValueFormatter
是覆盖以下方法的类:
@Override
public String getFormattedValue(float value, AxisBase axis) {
...
return <axis values for each point at position "value">
}
由于
答案 0 :(得分:0)
真正的解决方案可能在其他地方,您应该在开源库https://github.com/PhilJay/MPAndroidChart/issues
上提出问题黑客警报 但如果你愿意,你可以让任意代码等你:
ggplot(dd2, aes(x = variable, y = value, group=country, color=country)) + geom_line() +
geom_point()
注意 - 你不能让MainThread等待太长时间,否则你会得到一个ANR(你不应该让它真的等待)
答案 1 :(得分:0)
LineChart
这样的MPAndroidChart类是View
的子类,因此应该在UI /主线程上更新。
如果您正在另一个线程(例如,AsyncTask
或使用RxJava)执行数据处理,那很好。但是,{/ 1}}对象本身的修改(例如,为图表变异View
或DataSet
)应该在UI /主线程上完成,否则您将遇到同步问题,如一个似乎在上面发生的。这是大多数标准Android视图的标准模式,而不仅仅是MPAndroidChart。请注意,IValueFormatter
等中的任何方法都没有实际生成另一个线程,因此消费者有责任确保他们使用正确的线程。
此外,在您更新LineChart
后,您需要致电DataSet
以让图书馆重新计算最低/最高。