Android 无青蒿素;确定图形视图何时完全渲染/绘制
我有一个片段,我构造并插入了一个GraphicalView,我需要知道GraphicalView(图表)什么时候完成绘制。api IsChartDrawed始终返回false,包括在包含片段的onResume中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();
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应该是字面上的屏幕点,但看起来它可能也考虑了填充/边距。向前的