【发布时间】:2010-08-04 15:09:44
【问题描述】:
我已经搜索了好几个小时,但未能找到我的问题的简洁明确的答案。我有一个应用程序,我需要在屏幕上绘制一个运动场(包括所有球场线)。到目前为止,我已经扩展了 SurfaceView 并且几乎复制了 LunarLander 演示的其余部分。 应用程序将间距绘制到正确尺寸所需的所有数据都从一个也可以正常工作的插座接收。但是,在 onDraw() 函数的那一刻,我正在绘制每一帧的所有线条,这导致模拟器中的帧速率相当慢(例如~10fps)。这是我的 onDraw() 函数:
@Override
public void onDraw(Canvas canvas) {
canvas.drawARGB(255,0,144,0);
canvas.drawLine(canvas, getFirstLine(), mPaint);
canvas.drawRect(canvas, getFirstRect(), mPaint);
canvas.drawRect(canvas, getSecondRect(), mPaint);
...
canvas.drawRect(canvas, getSecondRect(), mPaint);
drawAnimatedObjects();
}
然后我在这个背景上画出圆圈和不同的位置。我的问题是如何提高效率?有没有一种方法可以在应用程序初始化时绘制线条,而不必每帧都重新绘制它们?
感谢您的帮助。
【问题讨论】:
-
OpenGL ES 的性能比使用画布要好得多。如果你能走这条路,那是值得的。 API Demos 项目中也有一些 2d 绘图演示。
-
你在真机上测试过吗?模拟器图形性能不能代表您在真实设备上看到的效果。
标签: java android performance canvas ondraw