2012-03-27 61 views
0

我正在阅读SurfaceView以及如何使用它,并且我遇到了一些信息,指出SurfaceViewView#willNotDraw()默认设置为false,并且您可以致电SurfaceView#onDraw()。我还读到RomainGuy说这是默认完成的,因为它更高效。我现在的问题是,你什么时候应该在一个单独的线程中处理呼叫SurfaceView#onDraw(),以及什么时候应该设置View#willNotDraw()true,并且只需拨打SurfaceView#invalidate()。两者之间是否有区别,并且一个人的表现是否比另一个有所提高?什么时候应该让SurfaceView通过UI线程绘制?

回答

1

参见:

http://developer.android.com/reference/android/view/View.html#setWillNotDraw(boolean)

我不知道你得到了你的信息,但至少javadoc的说,大多数用户将它设置为false获得的Android将其发送onDraw事件本身。关于你什么时候应该这样做的问题,我想说明一下你为什么使用SurfaceView

如果您的视图显示一些动态的(例如游戏或东西,有一个严密的事件循环),你要精确地控制更新时发生,特别是如果你将不得不使用的一个方面的信息更详细的形式invalidate保存重绘整个View。您不希望Android为您拨打invalidate,这就是为什么国旗在那里。

如果,另一方面,你只是画一些静态的,这是有道理的,让Android的UI堆栈控制废票。

顺便说一句,invalidate只发布到重新绘制View的请求,所以如果你打算使用事件循环式的意识到这一点(onDraw将某个你怎么称呼它叫)。

编辑:一些澄清。

1

使用SurfaceView.onDraw()和SurfaceView.invalidate()将使SurfaceView像一个普通视图,你将支付与SurfaceView相关的额外开销。如果你想从UI线程绘制,使用常规的视图来代替。它更容易,更便宜。

相关问题