Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android View vs SurfaceView vs GLSurfaceView for 2D绘图应用程序,具有可缩放的用户界面_Android_Opengl Es_Android View_Surfaceview_Glsurfaceview - Fatal编程技术网

Android View vs SurfaceView vs GLSurfaceView for 2D绘图应用程序,具有可缩放的用户界面

Android View vs SurfaceView vs GLSurfaceView for 2D绘图应用程序,具有可缩放的用户界面,android,opengl-es,android-view,surfaceview,glsurfaceview,Android,Opengl Es,Android View,Surfaceview,Glsurfaceview,我计划编写一个具有可缩放用户界面的2D绘图应用程序。使用该应用程序,用户应该能够转换(平移和缩放)绘制的路径(当然还有UI)。我假设同时将有多达500条路径。 现在,我想知道从哪个视图开始(view、SurfaceView或GLSurfaceView),以提供可接受的性能。我读了几篇文章[1-6],包括once-on-android开发者指南,但仍然不能100%确定使用哪个视图 根据Google I/O 2009()上的演示,在处理100多条路径时,canvas(View和SurfaceView

我计划编写一个具有可缩放用户界面的2D绘图应用程序。使用该应用程序,用户应该能够转换(平移和缩放)绘制的路径(当然还有UI)。我假设同时将有多达500条路径。 现在,我想知道从哪个视图开始(view、SurfaceView或GLSurfaceView),以提供可接受的性能。我读了几篇文章[1-6],包括once-on-android开发者指南,但仍然不能100%确定使用哪个视图

根据Google I/O 2009()上的演示,在处理100多条路径时,canvas(View和SurfaceView)的运行速度似乎不够快

是否有人认为使用canvas或OpenGL实现该应用程序是可行的

[1]

[2]

[3]

[4]

[5]


[6]

由于性能问题,您需要使用硬件渲染。显示器的密度越来越高,所以触摸软件中的每个像素的速度越来越慢

如果要使用画布绘制,则必须渲染到自定义视图,并启用。曲面上的画布渲染始终使用软件完成

SurfaceView和GLSurfaceView几乎是一回事;GLSURFACHEVIEW只有一些助手功能,可以为您处理一些家务。可以使用GLES在SurfaceView和TextureView上渲染。这方面的例子很多

如果你知道引擎盖下发生了什么,去看医生


<>你可能想考虑使用一个开源的2D游戏引擎。这将处理EGL设置,应该提供用于GLES字体渲染等的代码。

Hi!谢谢你的回答!我写的问题和OP的一样,刚刚找到了你的答案。我想你在安卓系统上一定很有经验。我写的是一个简单的绘画特征。因为该功能只是我应用程序的一小部分,所以我没有选择GLSURFACHEVIEW,而是编写了自己的自定义视图。我曾经使用DirectX制作windows游戏,所以如果我正在创建一个游戏,那么我肯定会使用GLSURFACHEVIEW。但正如我上面所说的,绘画并不是这次的主要内容,到目前为止,它在视觉上效果很好!因为我对它进行了一周的测试和改进,所以它的功能尽可能地稳定和优化。所以我认为现在就完成开发是可以的,但我仍然想知道GLSurfaceView是否能帮我减少一点延迟。我所说的延迟实际上不是由视图的onDraw()引起的。主要的问题是很长的贝塞尔曲线笔划的计算逻辑,但我现在不能再优化算法了。至于我的自定义视图,它具有双缓冲功能,仅当图像被修改时才调用invalidate(),并且还限制FPS-invalidate()每秒最多调用60次。(1)如果你想问问题,应该将其作为问题发布;否则,除了我,几乎没有人会看到它,你会错过其他的意见。(2) 在进行更改之前,请使用systrace找出您的时间花在哪里。用跟踪部分包装渲染代码(参见示例)。(3) 我的答案中的“必须”是出于性能原因——画布渲染到曲面不是硬件加速的。(4) 延迟!=吞吐量(5) 调用invalidate(),视图UI使用Choreographer匹配显示刷新率。当前,曲面上的画布渲染(SurfaceView、GLSurfaceView、TextureView、MediaCodec曲面输入等)没有硬件加速。GLSURFACHEVIEW只是SURFACHEVIEW的一个包装器,它提供了一些GLES辅助类——您可以使用GLES渲染到任何曲面上(如Grafika所示)。stackoverflow对于开放式的“我应该如何做X”类问题来说不是很好(请参阅)。我不知道除了谷歌群组列表之外还能去哪里。