机器人的OpenGL ES 2:如何在主活动使用一个OpenGL活性的片段(Android Open

2019-10-20 12:37发布

我很新到Android和OpenGL ES。 我要创建在OpenGL的GUI,我想用它作为一个Fragment中的主要活动。 为了学习如何做到这一点,我想2个教程- 本教程片段和对OpenGL ES的Android开发教程 。

但我还是不明白,我究竟该怎么办包括在一个OpenGL视图Fragment 。 所以这个过程对我来说是相当混乱的OpenGL不使用XML布局文件。 我愿做这样的事情:从主要活动中Fragment教程中,我想包括第三Fragment用OpenGL。 去容易对我,我是一个初学者:)

Answer 1:

如果开发者教程是什么去了,那么下面的设置将工作:

活动:

public class MainActivity extends FragmentActivity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        getSupportFragmentManager().addOnBackStackChangedListener(new OnBackStackChangedListener()
        {
            public void onBackStackChanged()
            {
                int backCount = getSupportFragmentManager().getBackStackEntryCount();
                if (backCount == 0)
                {
                    finish();
                }
            }
        });

        if (savedInstanceState == null)
        {
            getSupportFragmentManager().beginTransaction().add(R.id.main_container, new OpenGLFragment()).addToBackStack(null).commit();
        }
    }
}

活动XML(activity_main.xml中):

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

分段:

public class OpenGLFragment extends Fragment
{ 
    private GLSurfaceView mGLView;

    public OpenGLFragment()
    {
        super();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        mGLView = new MyGLSurfaceView(this.getActivity()); //I believe you may also use getActivity().getApplicationContext();
        return mGLView;
    }
}

我猜你需要使自己的GLSurfaceView作为教程说:

class MyGLSurfaceView extends GLSurfaceView {

    public MyGLSurfaceView(Context context){
        super(context);
        setEGLContextClientVersion(2);    
        // Set the Renderer for drawing on the GLSurfaceView
        setRenderer(new MyRenderer());

    }
}

而作为教程说,让你的渲染器:

public class MyGLRenderer implements GLSurfaceView.Renderer {

    public void onSurfaceCreated(GL10 unused, EGLConfig config) {
        // Set the background frame color
        GLES20.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    }

    public void onDrawFrame(GL10 unused) {
        // Redraw background color
        GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
    }

    public void onSurfaceChanged(GL10 unused, int width, int height) {
        GLES20.glViewport(0, 0, width, height);
    }
}


文章来源: Android OpenGL ES 2: How to use an OpenGL activity as a fragment in the main activity