gpt4 book ai didi

java - Android 中的高效二维绘图

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:03:53 25 4
gpt4 key购买 nike

我已经搜索了几个小时,但未能找到对我的问题的简洁明确的答案。我有一个应用程序,我需要在屏幕上绘制运动场(包括所有球场线)。到目前为止,我已经扩展了 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();
}

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

感谢您的帮助。

最佳答案

您绝对应该缓存任何在初始化时不会更改为位图的 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 中的高效二维绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3406910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com