2013-05-26 56 views
9

私の英語は申し訳ありません。Android GLSurfaceView透明な背景setZOrderonTopなし

私の仕事は、研究の多くの時間後

https://github.com/harism/android_page_curl/に基づいており、私はではなく、私は自分のアプリケーションに持っているものすべての問題のために、いくつかの解決策を発見しました。 GLSurfaceViewにいくつか問題があります。 relativeLayout、GLSurfaceView、上にオーバーレイがある背景があります。

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/background" 
    android:layout_width="match_parent" 
    android:background="@layout/backgroundrepeat" 
    android:layout_height="match_parent"> 
<com.m2y.foxprez.view.CurlView 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/openglview" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 
<RelativeLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/overlay" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
</RelativeLayout> 

私は私の見解initの場合は:私のレンダラで

setEGLConfigChooser(8,8,8,8,16,0); 
setRenderer(renderer); 
getHolder().setFormat(PixelFormat.TRANSLUCENT); 
setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); 
setZOrderMediaOverlay(true); 

:複数の研究の後

public void onSurfaceCreated(GL10 gl, EGLConfig config) { 
    gl.glClearColor(0f, 0f, 0f, 0f); 
    gl.glShadeModel(GL10.GL_SMOOTH); 
    gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST); 
    gl.glHint(GL10.GL_LINE_SMOOTH_HINT, GL10.GL_NICEST); 
    gl.glHint(GL10.GL_POLYGON_SMOOTH_HINT, GL10.GL_NICEST); 
    gl.glEnable(GL10.GL_LINE_SMOOTH); 
    gl.glDisable(GL10.GL_DEPTH_TEST); 
    gl.glDisable(GL10.GL_CULL_FACE); 
} 

public synchronized void onDrawFrame(GL10 gl) { 
    gl.glClearColor(0f,0f,0f,0f); 
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 
    gl.glLoadIdentity(); 
} 

を、私は現在、この結果で封鎖されています:
とsetZOrderOnTop、私は背景があるが、オーバーレイは下にある 景色。
with setZOrderMediaOverlay、オーバーレイがありますが、背景は黒です。

誰かが私を助けることができますか?

+1

私はまったく同じ問題を抱えていますが、解決策を見つけましたか? – aez

+0

すべてのソリューションが見つかりましたか? – yarin

答えて

11

これは私の仕事:

ここで見つける
final GLSurfaceView glView = (GLSurfaceView) findViewById(R.id.glView); 

glView.setZOrderOnTop(true); 
glView.setEGLConfigChooser(8, 8, 8, 8, 16, 0); 
glView.getHolder().setFormat(PixelFormat.RGBA_8888); 
glView.setRenderer(new MyRenderer()); 
glView.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); 

を:http://andrewhague.wordpress.com/2011/05/24/how-to-set-a-transparent-glsurfaceview/

+0

OpenGLビューにいくつかのオーバーレイ・フロントを置くことはできますか? OpenGLで私のオーバーレイをするのと同じような解決策を見つけましたが、助けてくれる解決策があれば 編集:私はオーバーレイについて話すとき、私は相対レイアウトについて話します(私のOpenGLビューの要素ではありません) – user2422856

+0

私は試しませんでした。実際には、私はこれを見つけたが、反対のことを試みた。 –

+0

私のコードでこのことを試しましたが、動作しません。シェーダの設定に問題はありますか? –

2

私はGLSurfaceViewの上に表示して同じことを達成したいと私は、制限なしに解決策を見つけていません。最初に、glView.setZOrderOnTop(true)は正しい透明な背景を示しますが、順序付けビューの順序に関係なく常に上に表示されます。第2に、ZOrderOnTopを使用しないと、ビューの階層は維持されますが、GLSurfaceの背景は黒色であるか、またはレンダラーでglClearColor(赤、緑、青、アルファ)で設定された色です。残念ながら

android:windowIsTranslucent="true" 

ない限り、この方法を使用する場合、アルファ引数には効果がありませんし、これに伴う問題は、あなたがOSビューに穴をパンチしたくないかもしれないということです。 OpenGLを使用してよりアニメーション化されたUIのためにこれを簡単に達成する方法があるはずです。私は解決策を見つけることなく、このサイトや他の人を検索しました。

1

同じ問題が発生しています。私はあなたが

setRenderer(...); 

幸運を呼び出す前に

setZOrderOnTop(true); 
getHolder().setFormat(PixelFormat.RGBA_8888); 

のための呼び出しを行う必要があることを発見しました!