我正在寻找显示如何使用 Android SurfaceView实现每秒 30 帧的示例代码示例?假设每一帧从位置 x 和 y 开始绘制一个圆,并且每一帧将 x 和 y 递增 1。
额外的问题:在上面我想覆盖另一个视图以显示文本内容,以便绘制的任何图形都显示在此文本内容下方。如何做到这一点?
我正在寻找显示如何使用 Android SurfaceView实现每秒 30 帧的示例代码示例?假设每一帧从位置 x 和 y 开始绘制一个圆,并且每一帧将 x 和 y 递增 1。
额外的问题:在上面我想覆盖另一个视图以显示文本内容,以便绘制的任何图形都显示在此文本内容下方。如何做到这一点?
如果你想要高帧率,你真的需要阅读GLSurfaceView。在正常的表面视图下,您将受到费用布局计算和以 CPU 为中心的渲染的支配。使用 GLSurfaceView,您可以将其卸载到 GPU 并严格有效地控制布局。
创建一个每秒执行 30 次的线程:
事实上,如果你的线程只是坐在那里而不试图暂停,它将被限制到屏幕的帧速率。
您需要确保该线程与表面视图的管理正确同步——例如,如果表面正在更改或被破坏,您的代码应该与线程同步,以确保线程在发生这种情况时停止运行。
当然,这确实意味着您正在对画布进行软件渲染。根据您正在做什么,这可能可以为您提供 30fps 的动画。如果没有,您将需要使用 GLSurfaceView。无论如何,您可能都想考虑使用它,只是因为它会为您处理线程部分。
这可能是一个旧线程,但我认为这可以帮助其他人。这是我在使用surfaceView时发现的一个很好的教程: http ://www.droidnova.com/playing-with-graphics-in-android-part-i,147.html
这是一篇关于如何实现游戏循环的好文章,它可以帮助将 FPS 限制为 30: http ://www.koonsolo.com/news/dewitters-gameloop/
如果您愿意,可以直接将文本添加到您的surfaceView,这是一个示例
public void onDraw(Canvas canvas) {
...
// Add text
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setFakeBoldText(true); // if you like bold
paint.setShadowLayer(5, 5, 5, Color.GRAY); // add shadow
paint.setColor(Color.WHITE);
paint.setTextSize(30);
canvas.drawText("FPS: " + _fps, 10, 35, paint);
}