Ok, Just some background… I have a fully functioning game that uses the canvas to draw, and I’m in the process of trying to learn and convert the drawing over to OpenGL ES 1.0. (to keep compatibility.)
What I’ve been trying to do, Is figure out a way to incorporate the GLSurfaceView and Renderer into the program so that I can switch the drawing over piece by piece. (There are a lot of sprites and I have needs to update often, so I don’t want it to take me a month to release the next update.)
It has been suggested that I Use the GLSurfaceView on top of the current SurfaceView, and i’m getting there but I’ve hit a snag.
I’m basically using the LunarLander example and trying to add on a simple OpenGL renderer that draws a texture on a square and renders it. The goal would be to draw the square on top of the canvas.
Here is the relevant code in the Activity:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.lunar_layout);
LinearLayout detailListView = (LinearLayout) findViewById(R.id.dets); // Find the layout where you want to add button
Button button = new Button(this);
button.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT));
detailListView.addView(button);//add view to add
mGLSV = new BasicGLSurfaceView(this);
mGLSV.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT));
detailListView.addView(mGLSV);
//clipped
The lunar_layout file looks like this:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.example.android.lunarlander.LunarView
android:id="@+id/lunar"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<LinearLayout
android:id="@+id/dets"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="0dp"
android:layout_marginTop="50dp"
android:orientation="vertical" >
<com.google.ads.AdView
android:id="@+id/adView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
ads:adSize="BANNER"
ads:adUnitId="a14ecf8f2d9ef49"
ads:loadAdOnCreate="true" >
</com.google.ads.AdView>
</LinearLayout>
<RelativeLayout
android:id="@+id/relLayout"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:gravity="center_horizontal"
android:text="@string/lunar_layout_text_text"
android:textColor="#88ffffff"
android:textSize="24sp"
android:visibility="visible" />
</RelativeLayout>
</FrameLayout>
Pretty Simple, I’m trying to use that LinearLayout to add things on top of the Surface View. Notice I also add a scratch Button, just to check the concept works.
What I end up with is the canvas, and the button showing up correctly, but no sign of the GLSurfaceView. What am I doing wrong?
Figured it out myself. Even though SurfaceView is a subclass of View, the way SurfaceView displays through the window is kinda funny, Basically The canvas actually goes through the surfaceview but is behind it in Z order. Because of this Multiple surface views have to be ordered using surfaceview.setZOrderOnTop(true);
Now I just have to worry about making the GLSurfaceView Transparent.