以下代码显示了我如何将 Libgdx 游戏 (MyGdxGame) 加载到 LinearLayout。在创建游戏时,我设置了一个摄像头并加载了一个小的 wav 声音文件。加载 View 后加载纹理。
问题是在 fragment 过渡到这个 fragment 的过程中,有一个明显的黑色闪光和延迟。是否有可能减少这种情况并改善 fragment 过渡。
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = null;
Bundle bundle = getArguments();
if (bundle != null) {
this.input = bundle.getParcelable(Utils.FRAGMENT_INPUT_KEY);
} else {
input = new FragmentInput();
}
view = inflater.inflate(R.layout.solve, container, false);
surface = (LinearLayout) view.findViewById(R.id.puzzleView);
activity = (MainActivity) getActivity();
com.badlogic.gdx.graphics.Color color = new com.badlogic.gdx.graphics.Color(Color.red(input.backColor) / 255f,
Color.green(input.backColor) / 255f,
Color.blue(input.backColor) / 255f, 1.0f);
size = input.pieceCount;
cols = input.columns;
GameData gdata = new GameData();
gdata.rows = size / cols;
gdata.columns = cols;
gdata.backColor = color;
gdata.setCategory(input.category);
if (input.rotated) {
gameView = new MyGdxGameRotate(this, gdata);
} else {
gameView = new MyGdxGame(this, gdata);
}
if (surface != null) {
AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
View game = initializeForView(gameView, config);
surface.addView(game);
}
return view;
}
最佳答案
onCreateView
在显示 fragment 之前被调用,在这里做繁重的工作意味着您延迟显示该 View (“黑色闪光”),相反,您应该首先将繁重的工作移至 onResume
或至少 onViewCreated
其次,将负载放在后台线程上,以便 UI 线程可以继续处理 fragment 的显示。在 Android 中执行此操作的最简单方法是使用 AsyncTask,它允许您在加载所有内容时轻松通知 UI
public void onViewCreated() {
new AsyncTask<Void, Void, Void>() {
public Void doInBackground() {
//Do your loading
}
public void onPostExecute(Void aVoid) {
//Update display, play sound (on resumed fragment)
}
}.execute();
}
如果您是 Android 新手,请小心使用此方法泄漏上下文
关于android - 将 Libgdx 游戏加载到 Fragment 在 Android 上显示黑屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49104073/