установите GLSurfaceView для отображения в ограниченном пространстве - PullRequest
2 голосов
/ 28 мая 2020

Я работаю над Android Studio и OpenGL ES. Мне удалось создать треугольник, но я не знаю, как показать его в ограниченном пространстве (например, 300dp x 300dp).

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

Я думаю, setContentView (R.activity.something); и установка GLSurfaceView в действии (с размером макета: 300dp x 300dp) должны работать, но не знаю как.

1 Ответ

1 голос
/ 28 мая 2020

Вы можете создать макет с помощью surfaceView, например, activity_gl. xml:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
        tools:context=".activities.OpenGLActivity">
    <com.app.LimitedSurfaceView
        android:id="@+id/oglView"
        android:layout_width="300dp"
        android:layout_height="300dp"/>
    <!-- other elements -->
</androidx.constraintlayout.widget.ConstraintLayout>

И создать класс LimitedSurfaceView:

package com.app;

public class LimitedSurfaceView extends GLSurfaceView {
    private SceneRenderer renderer;

    public LimitedSurfaceView(Context context) {
        super(context);
    }

    public LimitedSurfaceView(Context context, AttributeSet attributes) {
        super(context, attributes);
    }

    public void init(Context context) {
        setPreserveEGLContextOnPause(true);
        setEGLContextClientVersion(2); // or setEGLContextClientVersion(3)
        renderer = new SceneRenderer(context);
        setRenderer(renderer);
        setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
        ...
    }
}

Затем в классе OpenGLActivity инициализируйте limitedSurfaceView:

package com.app.activities

public class OpenGLActivity extends AppCompatActivity {
    private LimitedSurfaceView limitedSurfaceView;

    @Override
    protected void onCreate(Bundle state) { 
        super.onCreate(state);
        setContentView(R.layout.activity_gl);
        limitedSurfaceView = findViewById(R.id.oglView);
        limitedSurfaceView.init(this.getApplicationContext());
        ...
    } 
}

Результат:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...