问题描述
我是一个新手到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布局声明的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!