2012-02-02 113 views
1

如何在扩展GLSurfaceView的类上调用onDraw()方法。我需要画布来绘制用户的手势。 (FingerPaint.java逻辑)。同时我需要渲染器的onDrawFrame()来调用其他效果。我可以通过维护一个标志来管理对这两种方法的调用。我调用invalidate(),但也无法调用onDraw()。 GLSurfaceView扩展视图,所以我想我可以重写onDraw()并可以通过调用invalidate()来调用它。请扔一些灯。感谢在提前克里希纳:)如何调用扩展GLSurfaceView类的onDraw()?

+0

当您将渲染类设置​​为它时,它会自动调用 – Sameer 2012-02-02 12:51:04

+0

当我们设置渲染类,然后调用onDrawFrame()。我想调用onDraw(),这是在我的课中扩展GLSurfaceView – 2012-02-02 13:21:04

回答

1

尝试从您的GLSurfaceView调用requestRender()。 显然,将rendermode设置为“RENDERMODE_WHEN_DIRTY”时效果最佳。 这意味着你将不会连续渲染,因此可能会干扰效果所需的“常量”渲染。

我认为最好的解决方案是在2个叠加曲面和2个渲染器之间分割渲染。每当用户进行交互时,请求底部表面(指纹表面)渲染一个框架,并在您连续渲染的顶部(gfx表面)上渲染一个框架。或者交换一下......无论哪个效果最好。

+0

@Eric感谢您付出艰辛的回答。 :)其实我正在使用GLSurfaceView及其渲染器来显示pageTurn效果。我想使用onDraw(final Canvas c)作为FingerPaint.java逻辑,即用户涂鸦。现在我想要潦草的路径也有翻页的效果。所以我想在相同的位图上进行翻页和涂写。 – 2012-02-02 13:44:44

+0

您可以将用户涂鸦渲染到纹理,然后在渲染翻页时使用该纹理。 – Erik 2012-02-02 14:37:34

+0

我不认为你可以拥有多个SurfaceViews,至少在Android-4之前。所以你将不得不做你自己的屏幕合成。 – 2012-02-03 02:14:39

0

只要调用invalidate()和onDraw()就可以调用,就像普通的View一样。画布绘制在GLES视口的顶部。

到目前为止我无法执行invalidate(Rect dirty)。整个视图总是重绘。

在绘制之前需要放置setWillNotDraw(false)。