尝试启动渲染器GLSurfaceView布局声明 [英] Trying to start renderer from GLSurfaceView declared in layout

查看:143
本文介绍了尝试启动渲染器GLSurfaceView布局声明的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是一个新手到OpenGL Android和上周我描述未能得到渲染器开始为GLSurfaceView布局声明的问题。如果我宣布在活动类的setContentView它的渲染它开始罚款。这里有一个simplifed版本的所有源$ C ​​$ C。我在做什么错了?

I'm a newbie to OpenGL on Android and last week I described a problem failing to get the renderer to start for a GLSurfaceView declared in the layout. It starts fine if I declare the renderer in the Activity class and setContentView to it. Here's a simplifed version with all the source code. What am I doing wrong?

布局即可。 。 。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent">

  <Button
    android:id="@+id/dummy"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="a Button" />
  <FrameLayout
  android:id="@+id/framelay"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
     <com.test.rendertest.RTSurface
     android:id="@+id/RTSurfaceView"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"/>
  </FrameLayout>  
</LinearLayout>

Activity类。取消注释的 // A 的年代,和注释掉的 // B 的年代和渲染器运行。但如图所示,渲染甚至低于不运行,虽然它的构造函数被调用。

Activity class. UNcomment the //A's, and comment-out the //B's and the renderer runs. But as shown below the renderer does not run even though its constructor gets called.

public class RenderTest extends Activity {

       RTSurface myView;
       @Override
       public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
//        myView = new RTSurface(this);   // A
//        setContentView(myView);         //A
          setContentView(R.layout.main);        // B
          myView = (com.test.rendertest.RTSurface)findViewById(R.id.RTSurfaceView);  //B
       }

       @Override
       protected void onPause() {
           super.onPause();
           myView.onPause();
       }

       @Override
       protected void onResume() {
           super.onResume();
           myView.onResume();
       }       
}

GLSurfaceView 。 。 。

class RTSurface extends GLSurfaceView  {
   private final RTRenderer renderer;

   public RTSurface(Context context) {
      super(context);
      Log.i("rendertest", "RTSurface constructor - Default Form");
      renderer = new RTRenderer();
      setRenderer(renderer);
   }

   public RTSurface(Context context, AttributeSet attrs) {
      super(context, attrs);    
      Log.i("rendertest", "RTSurface constructor - Layout Form");
      renderer = new RTRenderer();
      setRenderer(renderer);
   }  
}

。 。 。和渲染(只是存根)

class RTRenderer implements GLSurfaceView.Renderer {

   public RTRenderer () {
       // a constructor just to have somewhere to set 
       // breakpoints and logcat messages
       Log.i("rendertest", "RTRenderer Constructor");      
   }

   public void onSurfaceCreated(GL10 gl, EGLConfig config) {               
      Log.i("rendertest", "onSurfaceCreated in RTRenderer");                   
   }

   public void onSurfaceChanged(GL10 gl, int width, int height) {
      Log.i("rendertest", "onSurfaceChanged in RTRenderer");                
   } 

   public void onDrawFrame(GL10 gl) {   
       Log.i("rendertest", "onDrawFrame in RTRenderer");     
     }  
} 

在此先感谢!

推荐答案

您没有指定您的LinearLayout方向,因此它被默认设置为横向。这意味着你的GLSurfaceView是屏幕​​之外(因为您将按钮的宽度设置为 FILL_PARENT )。

You didn't specify your LinearLayout orientation, so it is set to horizontal by default. This means your GLSurfaceView is outside of the screen (because you set your button width to fill_parent).

就以下属性添加到您的LinearLayout:

Just add the following attribute to your LinearLayout :

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

这篇关于尝试启动渲染器GLSurfaceView布局声明的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆