我遇到的问题是我通过更新数据并调用mMyChart.invalidate()来实时刷新LineDataSet图形。
一个线程从服务器请求数据,处理它,并通过消息将其发送到第二个线程,第二个线程是主要活动线程,负责绘制图形。
问题是这个无效调用似乎在图表实际重绘之前完成,因此请求数据的其他线程关闭并请求更多数据并将其发送到线程以重新绘制图表。绘制图表的线程在一段时间后非常落后,并且开始花费很长时间来响应任何事情,运行的时间越长,所需的时间就越长。
我的问题很简单,因为我想要这样做,所以我不会继续请求数据,直到情节完成绘图。绘图完成后如何收到回调?或者,有没有办法检测它何时正在绘制?
谢谢,
埃里克
答案 0 :(得分:1)
您可以尝试ViewTreeObserver
(相关SO问题here)
视图树观察器用于注册可以在视图树中通知全局更改的侦听器。这样的全局事件包括但不限于整个树的布局,绘图过程的开始,触摸模式的改变....应用程序永远不应该实例化
ViewTreeObserver
,因为它是由视图层次结构提供的。有关更多信息,请参阅getViewTreeObserver()
。
或者您可以尝试扩展您正在使用的特定Chart
类型,并覆盖onDraw(Canvas canvas)
以在绘制传递完成时调用侦听器:
public class ExtendedBarChart extends BarChart {
public ExtendedBarChart(Context context) {
super(context);
}
public ExtendedBarChart(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ExtendedBarChart(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// TODO: Drawing completed, execute callback...
}
}