aChartEngine;确定何时完全渲染/绘制GraphicalView

时间:2014-06-04 19:52:00

标签: android achartengine

我有一个片段,我构建并插入一个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的一个实例。

图表渲染得很好,我可以通过触摸处理访问我稍后需要的点,现在只需要更早地找到它们就可以解决这个问题了。任何工作等等,都赞赏。

2 个答案:

答案 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

构造函数内的接口