Задать вопрос

Как отрисовать стандартные views над LibGDX?

Нужно отобразить стандартные Views над LibGDX.Наткнулся на это в официальной документации.Сделал, как там говорилось, но Fragment с LibGDX при старте Activity инфлейтю во FrameLayout, а не в содержимом Activity, чтобы было видно Views.И всё работает, но моих Views над FrameLayout из Activity layout не видно, будто Fragment всё равно стал fullscreen и заполнил всё пространство Activity.Каким образом , я могу этого избежать?

GameActivity layout:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="..."> <!--путь к Activity-->

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    <!-- my views...-->

    </RelativeLayout>

    <FrameLayout
        android:id="@+id/game_fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </FrameLayout>

</RelativeLayout>


Код GameActivity:

public class GameActivity extends AppCompatActivity implements AndroidFragmentApplication.Callbacks {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_game);
        setupGameFragment();
    }

    private void setupGameFragment() {
        GameFragment fragment = new GameFragment();
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.replace(R.id.game_fragment_container, fragment);
        transaction.commit();
    }

    @Override
    public void exit() {

    }
}


Код GameFragment:

public class GameFragment extends AndroidFragmentApplication {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return initializeForView(new GameLauncher());
    }

}


Ответ:
Нужно было изменить флаг setZOrderOnTop у SurfaceView,
на которой рисуется LibGDX.

Код GameFragment:

public class GameFragment extends AndroidFragmentApplication {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = initializeForView(new GameLauncher(), config);
        setupSurfaceView();
        return view;
    }

    private void setupSurfaceView() {
        if (graphics.getView() instanceof SurfaceView) {
            SurfaceView surfaceView = (SurfaceView) graphics.getView();
            surfaceView.setZOrderOnTop(false);
        }
    }
}


Cпасибо Денису Загаевскому!
  • Вопрос задан
  • 799 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
Во-первых, у вас game_fragment_container лежит выше, чем ваши view (потому что ниже в файле резметки), для начала стоит попробовать поменять их местами.
Во-вторых, libGDX рисует всё в SurfaceView, если мне не изменяет память, а у него есть такой флажок setZOrderOnTop, и если он выставлен (надо проверять), то свой контент вы не увидите.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы