Activity游戏加载时不显示布局(从AndroidAPI24开始)
Activity layout is not displayed during game loading (starting with Android API 24)
有游戏activity执行OpenGL渲染(组件app.OGlSurfaceView)。游戏加载时,组件 textView "Loading..." 显示在黑屏上。
GameActivity.xml:
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".activities.GameActivity">
<app.OGlSurfaceView
android:id="@+id/oglView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<androidx.constraintlayout.widget.ConstraintLayout
android:background="@color/black">
<TextView
android:id="@+id/load_level_text"
android:text="Loading..."/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
这适用于 Android 和 API 14-23。但是从版本API 24 (Android 7.0)开始,黑屏加载信息不再出现,而是继续显示MainActivity.xml的布局(直到游戏加载)。问题:如何在游戏加载过程中出现消息?我将不胜感激。
找到解决方法。从 android 7.0 开始,在 MainActivity 中使用 AsyncTask。
MainActivity.kt:
class MainActivity: AppCompatActivity(view: View) {
...
fun startGameButtonClick() { // start the game
val layout: ConstraintLayout = findViewById(R.id.loading_layout)
Loading(layout).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)
...
val intent = Intent(this, GameActivity::class.java)
startActivity(intent)
}
}
AsyncTask.java:
public class Loading extends AsyncTask<Void, Void, Void> {
private WeakReference<ConstraintLayout> layout;
public Loading(ConstraintLayout layout) {
this.layout = new WeakReference<>(layout);
}
@Override
protected void onPreExecute() {
layout.get().setVisibility(View.VISIBLE); // show load message
}
...
}
有游戏activity执行OpenGL渲染(组件app.OGlSurfaceView)。游戏加载时,组件 textView "Loading..." 显示在黑屏上。
GameActivity.xml:
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".activities.GameActivity">
<app.OGlSurfaceView
android:id="@+id/oglView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<androidx.constraintlayout.widget.ConstraintLayout
android:background="@color/black">
<TextView
android:id="@+id/load_level_text"
android:text="Loading..."/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
这适用于 Android 和 API 14-23。但是从版本API 24 (Android 7.0)开始,黑屏加载信息不再出现,而是继续显示MainActivity.xml的布局(直到游戏加载)。问题:如何在游戏加载过程中出现消息?我将不胜感激。
找到解决方法。从 android 7.0 开始,在 MainActivity 中使用 AsyncTask。
MainActivity.kt:
class MainActivity: AppCompatActivity(view: View) {
...
fun startGameButtonClick() { // start the game
val layout: ConstraintLayout = findViewById(R.id.loading_layout)
Loading(layout).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)
...
val intent = Intent(this, GameActivity::class.java)
startActivity(intent)
}
}
AsyncTask.java:
public class Loading extends AsyncTask<Void, Void, Void> {
private WeakReference<ConstraintLayout> layout;
public Loading(ConstraintLayout layout) {
this.layout = new WeakReference<>(layout);
}
@Override
protected void onPreExecute() {
layout.get().setVisibility(View.VISIBLE); // show load message
}
...
}