Android 无青蒿素;确定图形视图何时完全渲染/绘制

Android 无青蒿素;确定图形视图何时完全渲染/绘制,android,achartengine,Android,Achartengine,我有一个片段,我构造并插入了一个GraphicalView,我需要知道GraphicalView(图表)什么时候完成绘制。api IsChartDrawed始终返回false,包括在包含片段的onResume中 public void onResume() { Log.d(TAG, "onResume, the mChart isDrawn: " + mChart.isChartDrawn()); super.onResume();

我有一个片段,我构造并插入了一个GraphicalView,我需要知道GraphicalView(图表)什么时候完成绘制。api IsChartDrawed始终返回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是折线图的一个实例


图形呈现良好,我能够通过触摸处理访问稍后需要的点,现在只需要稍微提前一点访问它们,我正在讨论这个问题。任何变通办法等,不胜感激

你之所以会这样,是因为在
onResume
期间,还没有开始绘制。这是整个Android系统,而不仅仅是aChartEngine。我不确定这是否是最好的设计决策,但事实就是如此

但好消息是:有一个很好的把戏

getView().getViewTreeObserver().addOnDrawListener(new OnDrawListener(){
    void onDraw(){
        getView().getViewTreeObserver().removeOnDrawListener(this);
        // do your stuff here
    }
});

这个技巧经常用于动画,因此您可以在屏幕上测量内容并进行适当的动画制作。

如果您查看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

的构造函数内初始化接口。IsChartDraw似乎总是返回false…永远使用视图树观察者也不起作用。该死。。。您评论说ViewTreeObserver在我发送答案的同一时刻不工作。您可以尝试执行post:
getView().post(runnable)在drawListener中。这样,在屏幕上画出东西后,代码就可以被称为
。哈哈!你这么说真有趣;这正是我最后要做的。现在。我才意识到这只发生在我第一次画图表的时候;之后再更新,一切正常。感谢@Budius的回复,我会发回我是如何制作的。我正试图在一个自定义视图上渲染一些东西,它覆盖在我的图形图表上,为了让生活更轻松,只需使用getScreenPoint。。。方法从所有系列数据点获取路径。当我在覆盖图上重新绘制此路径时,它会从图表中的直线移动。奇怪的我认为getScreenPoint应该是字面上的屏幕点,但看起来它可能也考虑了填充/边距。向前的