【问题标题】:Android - Most efficient way to draw multiple identical Drawables in a Canvas?Android - 在 Canvas 中绘制多个相同的 Drawable 的最有效方法?
【发布时间】:2014-05-07 15:40:55
【问题描述】:

我是 android 编程的新手,我的目的是在画布中绘制多个相同的可绘制对象(并以动画方式更改它们的 x y 坐标),返回调用类似 mySurfaceHolder.lockCanvas() 的方法。可绘制对象的数量是动态的,并且会随时间变化。

如何保持尽可能高的帧速率?

(抱歉英语不好)

【问题讨论】:

    标签: android canvas drawing surfaceview android-drawable


    【解决方案1】:

    据我所知,在屏幕上自己绘制动画图像的常用方法有两种:SurfaceViewGLSurfaceView (Android official site)。

    为了更好地绘制多个相同的图像,我的建议是在GLSurfaceView而不是SurfaceView上绘制图像。

    如果要绘制的相同图像的数量很大,那么在SurfaceView 上绘制的帧速率会受到设备速度的影响,而使用GLSurfaceView 则不会。这就是为什么我建议使用GLSurfaceView 来绘制图像。

    但是,如果您不熟悉 OpenGL ES,那么绘制多个相同图像的最有效方法是将您的逻辑语句与使用另一个线程的图像绘制代码段分开。使用drawable.draw(canvas)canvas.drawBitmap() 绘图即可。

    ps。使用GLSurfaceView 需要将drawable 转换为纹理,然后才能在GLSurfaceView 上绘制。

    【讨论】:

    • 绘制到GLSurfaceView时帧率不受设备速度影响?不知道你想在这里说什么。无论您如何渲染,帧速率显然取决于设备的速度。
    • GLSurfaceView 只是 SurfaceView 的一个包装器。您可以使用 GLES 在 SurfaceView 上进行渲染。区别在于使用 Canvas 进行渲染和使用 GLES 进行渲染。 (另见source.android.com/devices/graphics/architecture.html。)
    • 嗨,@Reto。我已经有一段时间没有查看我的答案的回复了。我同意你的观点,无论我们如何渲染,帧速率显然取决于设备的速度。但我的意思是这取决于我们要使用多少精灵。
    • 我确定当时我在一些运行 Android 4.2 的设备中通过使用 GLSurfaceView 而不是 SurfaceView 解决了低帧率问题。 (但我不确定我们是否还能分辨当前设备中 SurfaceView 或 GLSurfaceView 之间的帧率差异。) SurfaceView 和 GLSurfaceView 之间的一些性能信息在这里:stackoverflow.com/questions/5169338/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    相关资源
    最近更新 更多