【发布时间】:2014-07-16 14:14:24
【问题描述】:
我正在开发一个几乎完成的应用程序。但我对图形有一些问题:
最初我使用自定义“视图”,但在处理不同分辨率设备的时间时遇到了问题。动画也不流畅。
阅读了一些示例和评论后,我决定使用“SurfaceView”。现在动画很流畅,但一切都比“视图”慢。我不知道为什么,因为从“View”迁移到“SurfaceView”时我几乎没有改变:
在“视图”中(+90 fps):
@Override
public void run(){
for(;;){
if(gameState == PLAYING)
updatePhisic();
updateSprites();
this.postInvalidate();
try{
Thread.sleep(10);
}catch(InterruptedException e){}
}
}
在“Surfaceview”中(“Lienzo”是主类)(可能是 30 fps)。
@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”是解决方案。
谢谢。
【问题讨论】:
-
Surfaceview 中是否有线程在运行您的可运行对象?
-
不,它在一个单独的子类中。
标签: android view surfaceview