首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android中高效的2D绘图

Android中高效的2D绘图
EN

Stack Overflow用户
提问于 2010-08-04 23:09:45
回答 2查看 6.1K关注 0票数 6

我找了好几个小时,都没能找到我的问题的一个简洁、明确和回答。我有一个应用程序,我需要在屏幕上绘制一个运动场(包括所有的球场线)。到目前为止,我已经扩展了SurfaceView,并且几乎复制了LunarLander演示的其余部分。应用程序将间距绘制到正确尺寸所需的所有数据都是从一个套接字接收的,该套接字也工作得很好。然而,在onDraw()函数中的那一分钟,我在每一帧中绘制了所有的线条,这导致了模拟器中相当慢的帧率(例如~10fps)。下面是我的onDraw()函数:

代码语言:javascript
复制
@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();
}

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

谢谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-05 02:33:38

您绝对应该缓存任何在初始化时不会更改为位图的画布绘图,然后在onDraw()中绘制该位图。这对渲染时间有很大帮助。类似于:

代码语言:javascript
复制
Bitmap mField = null;

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

void onDraw(Canvas c)
{
  c.drawBitmap(mField);
}
票数 15
EN

Stack Overflow用户

发布于 2010-08-04 23:42:56

你的运动场是静态的还是在屏幕上滚动?如果它是静态的,您应该考虑构建它一次,并将其保存为图像,然后每次都会重新绘制。另一件事:与现代设备相比,仿真器非常慢。您应该至少在G1或更高版本上检查您的性能,以验证真正的性能。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3406910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档