一尘不染

Android中高效的2D绘图

java

我已经搜索了好几个小时,却无法找到明确明确的答案。我有一个需要在屏幕上绘制运动场(包括所有沥青线)的应用程序。到目前为止,我已经扩展了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();
}

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

谢谢你的帮助。


阅读 234

收藏
2020-12-03

共1个答案

一尘不染

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

Bitmap mField = null;

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

void onDraw(Canvas c)
{
  c.drawBitmap(mField);
}
2020-12-03