Как включить сцену LibGDX во ViewPager? - PullRequest
1 голос
/ 20 апреля 2020

Хорошо, я сдаюсь. Я расскажу вам, что я пытался сделать, и надеюсь на вашу помощь. Я хочу создать ViewPager с некоторыми сценами LibGdx.

MainActivity. java:

public class MainActivity extends FragmentActivity  {

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

        Display display = getWindowManager().getDefaultDisplay();
        final int screenWidth = display.getWidth();

        MyAdapter adapter = new MyAdapter(getSupportFragmentManager());

        final ViewPager viewPager = findViewById(R.id.viewpager);
        viewPager.setAdapter(adapter);
        viewPager.setCurrentItem(0);

        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            }

            @Override
            public void onPageSelected(int position) {

            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }

        });
    }

    public static class MyAdapter extends FragmentPagerAdapter {

        MyAdapter(@NonNull FragmentManager fm) {
            super(fm);
        }

        @Override
        public int getCount() {
            return 4;
        }

        @NonNull
        @Override
        public Fragment getItem(int position) {
            switch (position) {
                case 0:
                    return new Fragment1();
                case 1:
                    return new Fragment2();
                case 2:
                    return new Fragment3();
                case 3:
                    return new Fragment4();
                default:
                    return new Fragment1();
            }
        }
    }
}

И, например, Fragment1. java:

public class Fragment1 extends Fragment {

    public Fragment1() {
    }

    @Nullable

    public View onCreateView(@Nullable LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.main_activity_screen1, container, false);
    }
}

Это работает.

Теперь я хочу использовать LibGdx вместо макетов.

И я понял, что не понимаю, что делать дальше. Я нашел пример в https://github.com/kbigdelysh/libgdx-in-fragment/blob/master/android/src/com/mygdx/game/AndroidLauncher.java

Как я понимаю, я должен создать FragmentLayout в xml файле, но в примере это происходит в main. xml:

AndroidLauncher. java (MainActivity. java):

public class AndroidLauncher extends FragmentActivity implements  AndroidFragmentApplication.Callbacks {
    @Override
    public void onCreate (Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout);
        // Create libgdx fragment
        GameFragment libgdxFragment = new GameFragment();
        // Put it inside the framelayout (which is defined in the layout.xml file).
        getSupportFragmentManager().beginTransaction().
                add(R.id.content_framelayout, libgdxFragment).
                commit();
    }
    @Override
    public void exit() {
    }


}

GameFragment. java:

public class GameFragment extends AndroidFragmentApplication {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        // return the GLSurfaceView on which libgdx is drawing game stuff
        return initializeForView(new MyGdxGame());
    }
}

Конечно, возможно, я смогу использовать его в своем Fragment1 . java, но он расширяется от класса Fragment.

Я думаю, мне следует создать новый расширяемый класс из FragmentActivity, такой как класс AndroidLanucher, который будет программно создавать новый ресурс, который я буду использовать в классе Fragment.

Но это очень длинная цепь, и я боюсь ошибиться. Можете ли вы сказать, это правильно? Или, пожалуйста, дайте мне совет.

Извините за мой Engli sh.

...