我已经搜索了好几个小时,却无法为我的问题找到一个明确的答案。我有一个需要在屏幕上绘制运动场(包括所有沥青线)的应用程序。到目前为止,我已经扩展了SurfaceView并几乎复制了LunarLander演示的其余部分。
从 socket 也收到了应用程序将间距绘制为正确尺寸所需的所有数据,该 socket 也能正常工作。但是,在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();
}

然后,我在此背景上绘制圆圈和不同的位置。我的问题是我该如何提高效率?有没有一种方法可以在应用程序初始化时画线而不必在每一帧都重新画线?

谢谢你的帮助。

最佳答案

您绝对应该缓存在初始化时不会更改为位图的所有 Canvas 图形,然后在onDraw()中绘制该位图。这将大大改善渲染时间。就像是:

Bitmap mField = null;

void init()
{
  mField = new Bitmap(...dimensions...);
  Canvas c = new Canvas(mField);
  c.drawRect(...);
  ...
}

void onDraw(Canvas c)
{
  c.drawBitmap(mField);
}

关于java - Android中高效的2D绘图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3406910/

10-08 21:12