Android Studio TabbedActivity 拡張


各フラグメント表示後、上からリストビューが下りてくるTabbedActivityです。
ポイントはSectionsPagerAdapter#setPrimaryItem()でリストビューのY位置変更処理をする所です。
下記のコードの大部分はTabbedActivity を選択すると、AndroidStudio が自動的に生成してくれます。


<a href="https://youtu.be/cyfB7hMnTLc">サンプル動画(YouTube)</a><br>

```java
    public static class PlaceholderFragment extends Fragment {
  
        private static final String ARG_SECTION_NUMBER = "section_number";
        static ListView[] list = new ListView[7];  //リストビュー変数宣言

        public PlaceholderFragment() {
        }

        public static PlaceholderFragment newInstance(int sectionNumber) {
            PlaceholderFragment fragment = new PlaceholderFragment();
            Bundle args = new Bundle();
            args.putInt(ARG_SECTION_NUMBER, sectionNumber);
            fragment.setArguments(args);
            return fragment;
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_stage_select, container, false);
            int selector = getArguments().getInt(ARG_SECTION_NUMBER);

///////////////////////////////////////////////ここから追加
            ImageView imageView = rootView.findViewById(R.id.imageView);
            list[selector] = rootView.findViewById(R.id.movingList);
            ArrayList messages = new ArrayList<String>();
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(this.getActivity(), android.R.layout.simple_list_item_1, messages);
            list[selector].setAdapter(adapter);

            switch(selector){
                case 0:
                    messages.add("Stage0");
                    messages.add("Level1");
                    break;
                case 1:
                    messages.add("Stage1");
                    break;
                case 2:
                    messages.add("Stage2");
                    list[2].setY(-list[2].getHeight());
                    break;
                case 3:
                    messages.add("Stage3");
                    messages.add("Level 250");
                    //imageView.setImageResource(R.drawable.stage3);
                    break;
                case 4:
                    messages.add("Level 2 室町用");
                    imageView.setImageResource(R.drawable.stage4);
                    break;
                case 5:
                    messages.add("How to play");
                    messages.add("Level 0");
                    imageView.setImageResource(R.drawable.stage5);
                    break;
                case 6:
                    messages.add("Stage6");
                    //imageView.setImageResource(R.drawable.stage6);
                    break;
            }
///////////////////////////////////////////////ここまで追加
            return rootView;
        }

    }

    public class SectionsPagerAdapter extends FragmentPagerAdapter {
        int page;

        public SectionsPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            return PlaceholderFragment.newInstance(position);
        }

        @Override
        public int getCount() {
            return 7;  //要素数設定
        }

///////////////////////////////////////ここから追加
        @Override
        public void setPrimaryItem(ViewGroup container, final int position, Object object){
            super.setPrimaryItem(container, position, object);
            if(page == position)return;
            final float hide_y = -PlaceholderFragment.list[position].getHeight();

            //前ページのList隠し処理
            for(int i = 0; i < 7; i++){
                if(PlaceholderFragment.list[i] != null)
                PlaceholderFragment.list[i].setY(-PlaceholderFragment.list[i].getHeight());
            }

            page = position;

            new Thread(new Runnable(){
                float y = hide_y;
                public void run(){
                    while(y < 0) {
                        ListView list = PlaceholderFragment.list[position];
                        list.setY(y);
                        Log.d("messaged", "position y: " + y);
                        y += 5;  //Y軸移動量 / 1ステップ
                        try {
                            Thread.sleep(10);  //タイムインターバル
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }
            }).start();
            Log.d("messaged", "setPrimaryItem    position: " + position);
        }
////////////////////////////////////////////ここまで追加
```