我正在为一个Android应用程序编写一个图形库(是的,我知道有很多,但没有提供我们需要的可定制性。)
我希望图表可以缩放和平移。
我希望体验顺畅,留下小巧的CPU占用空间。
View.onDraw(Canvas)
Bitmap
OpenGL
OpenGL可能是专业的解决方案,肯定会提供更多的灵活性,但需要更多的工作(目前还不清楚)。
在OpenGL中,一件事情肯定更容易是平移/缩放,因为我可以操纵矩阵来使其正确,但我想其余的应该更难。
我不害怕弄脏手,但在开始挖掘之前我想知道我正朝着正确的方向前进。
我错过了任何解决方案吗?我所有的解决方案都是理智的吗?
我可以补充一点,当图表发生变化时,我希望对变化进行动画处理,这可能是所有人中最苛刻的任务。
答案 0 :(得分:16)
使用Views的问题在于您继承了UI工具包本身的开销。虽然工具包经过了很好的优化,但它的功能并不一定是你想要的。想要控制绘图时最大的缺点是无效/绘制循环。
您可以使用SurfaceView解决此“问题”。 SurfaceView允许您使用自己的渲染线程渲染到窗口,从而绕过UI工具包的开销。您仍然可以使用Canvas 2D渲染API。
然而,Canvas正在使用软件渲染管道。您的性能主要取决于CPU的速度和可用带宽。在实践中,它很少像OpenGL一样快。 Android 3.0为Canvas提供了一个新的硬件管道,但仅限于通过Views渲染时。您目前无法使用硬件管道直接渲染到SurfaceView上。
我建议您首先尝试使用SurfaceView。如果您正确编写代码(不要绘制超过您需要的代码,只重绘已更改的内容等),您应该能够实现所寻求的性能。如果这不起作用,请使用OpenGL。