2012-02-02 116 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)。