我有一个片段,我构建并插入一个GraphicalView,我需要知道GraphicalView(图表)何时完成绘制。 api isChartDrawn总是返回false,包括在包含片段的onResume内。
public void onResume()
{
Log.d(TAG, "onResume, the mChart isDrawn: " + mChart.isChartDrawn());
super.onResume();
mListener.didNotificyChartDrawn();
}
是否有通知我没有看到,或者是否知道图表何时完成呈现的策略?我问,因为我需要从用于构建图形视图的XYChart系列中访问系列点,如下所示:
mChart = new GraphicalView(getActivity(), mXYChart);
其中mXYChart是LineChart的一个实例。
图表渲染得很好,我可以通过触摸处理访问我稍后需要的点,现在只需要更早地找到它们就可以解决这个问题了。任何工作等等,都赞赏。
答案 0 :(得分:2)
你得到的是因为在onResume
期间还没有画画。那是整个Android,而不仅仅是aChartEngine。我不确定这是最好的设计决定,但那是怎么回事。
但好消息是:这是一个很好的伎俩。
getView().getViewTreeObserver().addOnDrawListener(new OnDrawListener(){
void onDraw(){
getView().getViewTreeObserver().removeOnDrawListener(this);
// do your stuff here
}
});
这个技巧用于动画很多,所以你可以在屏幕上测量内容并做适当的动画。
答案 1 :(得分:0)
如果查看GraphicalView中的onDraw
方法,它会在最后将布尔mDrawn
设置为true。所以必须发生的是你在打电话
public boolean isChartDrawn() {
return mDrawn;
}
在完成onDraw方法之前。我要么创建一个间隔处理程序来继续检查mDrawn
是否已经更改为true,或者修改库文件GraphicalView
以便它有一个可选的监听器,你可以附加它以在事情发生时被触发绘制:
DrawnInterface mCallback;
public interface DrawnInterface{
public void onDrawn();
}
.....
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.getClipBounds(mRect);
......
canvas.drawBitmap(fitZoomImage, left + width - zoomSize * 0.75f, buttonY, null);
}
mDrawn = true;
mCallback.onDrawn();
}
然后让您的调用活动实现您定义的DrawnInterface
,并初始化GraphicalView