Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using GLSurfaceView class with android xml layouts

I want to make use of the android xml layouts. I have put a glSurfaceView in a frame layout to use in conjunction with a linear layout like so...

<FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1">

<android.opengl.GLSurfaceView android:id="@+id/surfaceviewclass"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

</FrameLayout>

<LinearLayout android:id="@+id/gamecontrolslayout"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:layout_weight="5"
          android:background="@drawable/backdrop"> 
//some layout stuff

</LinearLayout>
<LinearLayout>

I then call my layout like so

setContentView(R.layout.main);
    GLSurfaceView glSurfaceView = (GLSurfaceView)findViewById(R.id.surfaceviewclass);

in onCreate();

How can I call my glSurfaceView so that I can make use of the xml layouts like this and also reference my own GLSurfaceView class (below is code that references my own GLSurfaceView class)...

glSurfaceView = new MyGLSurfaceView(this);
    setContentView(glSurfaceView);

Is there anyway of combining these two? I want to do this cos I've got a load of stuff going on in my glSurfaceView class like file loading and touch events. And only I've just thought about implementing this new layout

like image 431
Jack Avatar asked Oct 26 '11 16:10

Jack


2 Answers

Just reference your own class (with full packagename) in the xml, the same way you reference android.opengl.GLSurfaceView. Make sure that your subclass implements the proper constructor, and passes the context & attributes to the parent:

public MyGLSurfaceView(Context context, AttributeSet attrs)
{
   super(context, attrs);

Then you can fetch it using findViewById:

MySurfaceView glSurfaceView = 
             (MySurfaceView)findViewById(R.id.surfaceviewclass);

That should do the trick.

like image 68
svdree Avatar answered Sep 22 '22 16:09

svdree


If everything corect, like you write in the xml-layout, the full Path to the Glsurfaceview-class : (and classname)

it works only if the class, GLSurfaceView, written in a own File. in this file for shure, the construktors need to be written correctly.

i read about ,1 constructor for xml-refer, and one for comunication between classes. constructor for xml-refer, and one for comunication between classes, can be found, if written correcly, inside GLSurfaceView . GLSurfaceView, is where you set the Renderer, set it in the the xml constructor, must be the only way, it works fine. (shown in anwer 1)

xml-constructor:

public MyGLSurfaceView(Context context, AttributeSet attrs) { super(context, attrs); setEGLContextClientVersion(2);
renderer = new Renderer(context); setRenderer(renderer);

If you some of this peoples, who cant get SurfaceView work, in xml-layout ore, who buy this book from Apress - Beginning 3D- Game-Development. dont be angry ore hurt yourself. At page 44-45 it be written, in one file. Write GLSurfaceView, like in my answer, in own file. Renderer is own file, where: onSurfaceCreated, onSurfaceChanged, onDrawFrame..can be found And The MainActivity

like image 38
azuztekztorem Avatar answered Sep 22 '22 16:09

azuztekztorem