我正在开发一个即将完成的应用程序。但我在图形方面有一些问题:
最初我使用了一个自定义的“视图”,但在不同分辨率的设备中处理时间时遇到了麻烦。此外,动画也不流畅。
因此,在阅读了一些示例和评论后,我决定使用"SurfaceView“。现在动画是平滑的,但一切都比“视图”慢。我不知道为什么,因为当我从“视图”迁移到“SurfaceView”时,实际上没有做任何改变:
在“视图”(+90 fps)中:
@Override
public void run(){
for(;;){
if(gameState == PLAYING)
updatePhisic();
updateSprites();
this.postInvalidate();
try{
Thread.sleep(10);
}catch(InterruptedException e){}
}
}在"Surfaceview“中("Lienzo”是主类<"Surfaceview">) (可能是30fps)。
@Override
public void run() {
Canvas canvas;
while(running){
canvas = null;
try{
canvas = holder.lockCanvas(null);
synchronized(holder){
lienzo.updatePhisic();
lienzo.draw(canvas);
}
}
finally{
if(canvas != null)
holder.unlockCanvasAndPost(canvas);
}
}
}物理和图形绘制在这两种情况下都是相同的。
为什么?我的意思是,"SurfaceView“是所有东西的明显解决方案,而现在"OpenGL”是解决方案。
谢谢。
发布于 2014-05-27 23:38:57
当将应用程序从使用SurfaceView切换到单个View子类时,我也经历了显着的FPS增加。我相信这是由于硬件加速。
自从Android4.3中引入了SurfaceView的严重错误后,我就不得不放弃SurfaceView。参见https://code.google.com/p/android/issues/detail?id=58385。在安卓开发者邮件列表上的一次讨论中,Romain Guy实际上建议,由于硬件加速,使用普通的View可能会更快。事实证明这是真的-至少在我正在开发的设备(HTC One X和旧的Nexus 7)上是这样的。然而,图形更容易受到“起伏”动画的影响,这可能是真的。对我来说,FPS的增加缓解了最初不得不处理SurfaceView错误并重构我的应用程序以不使用SurfaceView的痛苦和挫败感。
https://stackoverflow.com/questions/23893266
复制相似问题