当前位置: 首页 > 面试题库 >

Android中高效的2D绘图

范侯林
2023-03-14
问题内容

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

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

谢谢你的帮助。


问题答案:

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

Bitmap mField = null;

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

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


 类似资料:
  • 不必要的效率考虑往往是性能问题的万恶之源。 ——William Allan Wulf     在第12章『速度的曲率』我们学习如何用Instruments来诊断Core Animation性能问题。在构建一个iOS app的时候会遇到很多潜在的性能陷阱,但是在本章我们将着眼于有关绘制的性能问题。

  • 首先,我意识到这个问题听起来好像我没有搜索,但我搜索了很多。 我为C#写了一个小的Mandelbrot绘图代码,它基本上是一个带有PictureBox的窗口窗体,我在上面绘制了Mandelbrot集。 我的问题是,速度很慢。如果没有深度缩放,效果会非常好,移动和缩放都非常平滑,每张图只需要不到一秒钟的时间,但是一旦我开始放大一点,到达需要更多计算的地方,速度就会变得非常慢。 在其他Mandelbr

  • 我正在编写一个可视化洞穴的OpenGL程序,所以当我可视化地表地形时,我希望它是透明的,这样你就可以看到下面的洞穴了。我假设我可以将来自数字高程模型的数据归一化为一个网格,该网格以规则的间距对准x/z轴,并将每个网格单元格渲染为两个三角形。使用对齐的网格,我可以避免在应用画家的算法时进行排序的成本(以确保适当的透明度效果);相反,我可以逐行呈现单元格,从最远的行和每行最远的单元格开始。 这一切都很

  • 导语 Qt提供了四个类来处理图像数据:QImage、QPixmap、QBitmap和QPicture,它们也都是常用的绘图设备。其中QImage主要用来进行I/O处理,它对I/O处理操作进行了优化,而且也可以用来直接访问和操作像素;QPixmap主要用来在屏幕上显示图像,它对在屏幕上显示图像进行了优化;QBitmap是QPixmap的子类,它是一个便捷类,用来处理颜色深度为1的图像,即只能显示黑白

  • 导语 如果要绘制一个复杂的图形,尤其是要重复绘制这样的图形,那么可以使用QPainterPath类,然后使用QPainter::drawPath()来进行绘制。QPainterPath类为绘制操作提供了一个容器,可以用来创建图形并且重复使用。一个绘图路径就是由多个矩形、椭圆、线条或者曲线等组成的对象,一个路径可以是封闭的,例如矩形和椭圆;也可以是非封闭的,例如线条和曲线。 环境:Windows X

  • 导语 Qt中除了绘制图形以外,还可以使用QPainter::darwText()函数来绘制文字,也可以使用QPainter::setFont()设置文字所使用的字体,使用QPainter::fontInfo()函数可以获取字体的信息,它返回QFontInfo类对象。在绘制文字时会默认使用抗锯齿。 环境:Windows Xp + Qt 4.8.4+QtCreator 2.6.2 目录 一、基本绘制