如何使用Android SurfaceView实现每秒30帧?

时间:2011-01-30 19:58:23

标签: android surfaceview

我正在寻找示例代码示例,该示例显示如何使用每秒30帧 Android SurfaceView?假设每个帧从位置x和y开始绘制一个圆,并且每个帧将x和y递增一个。

奖金问题: 除此之外,我想覆盖另一个视图以显示文本内容,以便绘制任何图形显示在此文本内容下方。如何做到这一点?

3 个答案:

答案 0 :(得分:6)

如果你想要高帧率,你真的需要阅读GLSurfaceView。在正常的表面视图下,您将受费用布局计算和以CPU为中心的渲染的支配。使用GLSurfaceView,您可以将其卸载到GPU并对布局进行严格有效的控制。

答案 1 :(得分:3)

创建一个每秒执行30次的线程:

  1. 调用SurfaceHolder.lockCanvas()。
  2. 绘制到画布中(必须完全重绘所有像素)。
  3. 调用SurfaceHolder.unlockCanvasAndPost()。
  4. 事实上,如果您的线程只是坐在那里而不试图暂停,它将被限制为屏幕的帧速率。

    您需要确保此线程与表面视图的管理正确同步 - 例如,如果曲面正在更改或被销毁,那么您的代码应该与线程同步以确保线程在此时停止运行发生的情况。

    当然,这确实意味着您正在将软件渲染到画布中。根据你正在做的事情,这可能很适合给你30fps的动画。如果没有,您将需要使用GLSurfaceView。你可能还是想考虑使用它,因为它会为你处理线程部分。

答案 2 :(得分:2)

这可能是一个旧线程,但我认为这可以帮助其他人。 这是我在使用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);             
}