我想在已有一些按钮,文本和图像的现有活动上绘制3D模型。我知道我们可以使用OpenGLES来做到这一点,但是它将创建一个绘制3D图形的窗口。我希望它像一个透明的模型。谁能帮我实现这一目标
也许还有另一种方法,但是您可以尝试一下。
将UI元素和OGL视图结合在一起:
public class GameActivity extends AppCompatActivity {
private SurfaceView surfaceView;
@Override
protected void onCreate(Bundle state) {
setContentView(R.layout.activity_gl);
surfaceView = findViewById(R.id.oglView);
surfaceView.init(this.getApplicationContext());
}
}
public class SurfaceView extends GLSurfaceView {
private SceneRenderer renderer;
public SurfaceView(Context context) {
super(context);
}
public SurfaceView(Context context, AttributeSet attributes) {
super(context, attributes);
}
public void init(Context context) {
renderer = new SceneRenderer(context);
setRenderer(renderer);
...
}
}
并创建布局activity_gl.xml:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
tools:context=".activities.GameActivity">
<com.app.SurfaceView
android:id="@+id/oglView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<TextView ... />
</androidx.constraintlayout.widget.ConstraintLayout>
但是要创建透明效果,最好在“框架”布局的元素中添加透明性,如:
<androidx.constraintlayout.widget.ConstraintLayout ...>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/frame"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/darkYellow"
android:alpha="0.5">
<TextView ... />
</androidx.constraintlayout.widget.ConstraintLayout>
<com.app.SurfaceView
android:id="@+id/oglView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
根据我自己的经验,透明度会影响性能,因此,如果有动画效果,最好不要使用透明度。
要从渲染线程更新UI元素,可以使用Handler / Looper。