我使用opengl从数组中绘制值。这些值来自3个Android传感器。我想在收集值时转动渲染器。似乎绘图和采集同时具有不同的结果,所以我想在收集传感器值时关闭渲染。目前我在ondraw()中使用布尔值来停止绘图。但是有更好的方法吗?当我停止画画的时候会发生怪异的事情,比如我画了几次抖动的东西,但它不能因为没有绘画(ondraw(){if(boolean){........ 。}}
非常感谢你的帮助: - )
答案 0 :(得分:5)
您可以要求GLSurfaceView仅在通过setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY)
询问时进行绘制,然后在您准备好绘制时调用requestRender()
。
答案 1 :(得分:1)
我有一个建议:创建一个线程来收集传感器数据,并使其可用作对象。该线程将收集所有数据,并在公共值对象上进行同步。阻止时间将最小化。
collectLocalData = getData();
synchronized(pubData) {
pubData.set(collectLocalData);
}
您的渲染线程可以在复制本地消费的公共值时执行相同的操作。
synchronized(pubData) {
renderLocalData.set( pubData );
}
renderData( renderLocalData );
如果轮询传感器的时间比渲染时间长,则会多次渲染相同的数据。动画可能会有点抽搐,但不会超过数据所代表的含义。
PS:你的紧张可能是数据本身的结果,而不是你的代码。