[android] ViewPagerで横スクロールのView切り替え+iOSのPageControll(ドット)実装

目次

ViewPagerで横スクロールのView切り替え+iOSのPageControll(ドット)実装

横スクロールするスライドをViewPagerで実装し
且つ、iOSのPageControllのようなドット表示機能を実装する

各スライド(写真)のFragmentを作成し、FragmentPagerAdapterでそれぞれのスライドを管理させ、FragmentPagerAdapterをViewPagerに実装させることで実現

dot3

dot2

dot1

photoFragment.java

array.xmlにTitle(titleArray)とDetail(detailArray)の文字列をページ分用意
画像ファイルはdrawableに配置してある画像をそれぞれ使用

public class PhotoFragment extends Fragment {

    public static LoginFragment newInstance(String fileName,int position) {
        LoginFragment frag = new LoginFragment();
        Bundle b = new Bundle();
        b.putString("fileName", fileName);
        b.putInt("position", position);
        frag.setArguments(b);
        return frag;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment, null);

        //packageName取得
        View myView = inflater.inflate(R.layout.fragment, container, false);
        String packageName = myView.getContext().getPackageName();

        //文字列から画像表示
        int imageId = getResources().getIdentifier(getArguments().getString("fileName"), "drawable", packageName);
        ImageView imageView = (ImageView)view.findViewById(R.id.imageView);
        imageView.setImageResource(imageId);

        //テキスト配列取得
        String[] array_strTitle = getResources().getStringArray(R.array.titleArray);
        String[] array_strDetail = getResources().getStringArray(R.array.detailArray);

        int position = getArguments().getInt("position");

        //textviewTitle
        TextView textviewTitle = (TextView)view.findViewById(R.id.fragment_Title);
        textviewTitle.setText(array_strTitle[position]);

        //textvieDetail
        TextView textvieDetail = (TextView)view.findViewById(R.id.fragment_Detail);
        textvieDetail.setText(array_strDetail[position]);

        return view;
    }
}

fragment.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/fragment_linearlayout"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical"
 android:weightSum="1">

 <ImageView
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:scaleType="fitCenter"
 android:id="@+id/fragment_bkImage"
 />

 <LinearLayout
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical">

 <TextView
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:id="@+id/fragment_Detail"
 android:textSize="20sp"
 android:text="Detail"
 android:textAlignment="textStart"
 android:paddingBottom="@dimen/activity_vertical_margin"
 android:paddingLeft="@dimen/activity_horizontal_margin"
 android:paddingRight="@dimen/activity_horizontal_margin"
 android:paddingTop="@dimen/login_detail_top"
 />

 <TextView
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:id="@+id/fragment_Title"
 android:textSize="40sp"
 android:text="Title"
 android:textAlignment="textEnd"
 android:paddingBottom="@dimen/activity_vertical_margin"
 android:paddingLeft="@dimen/activity_horizontal_margin"
 android:paddingRight="@dimen/activity_horizontal_margin"
 android:paddingTop="@dimen/login_detail_top"
 />

 </LinearLayout>

</RelativeLayout>

PhotoFragmentPagerAdapter.java

*FragmentPagerAdapterはレイアウト不要

public class PhotoFragmentPagerAdapter extends FragmentPagerAdapter {

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

    @Override
    public Fragment getItem(int position) {
        String fileName = "bk0"+ fileNumber; //bk0x.pngという画像をそれぞれ準備
        return PhotoFragment.newInstance(fileName,position); //画像のファイル名とページ番号を引き渡して、インスタンスを作成
    }

    @Override
    public int getCount() {
        return 6; //合計6ページ
    }
}

MainActivity.java

*ドット実装のためにdrawableに「dot_selected.png」と「dot.png」という画像を配置

public class MainActivity extends AppCompatActivity {

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

        setPager();
    }


    private void setPager() {
        FragmentManager manager = getSupportFragmentManager();
        ViewPager viewPager = (ViewPager) findViewById(R.id.viewPager);
        LoginFragmentPagerAdapter adapter = new LoginFragmentPagerAdapter(manager);
        viewPager.setAdapter(adapter);

        //スライドのドット実装
        final ImageView img_page1 = (ImageView)findViewById(R.id.img_page1) ;
        final ImageView img_page2 = (ImageView)findViewById(R.id.img_page2) ;
        final ImageView img_page3 = (ImageView)findViewById(R.id.img_page3) ;
        final ImageView img_page4 = (ImageView)findViewById(R.id.img_page4) ;
        final ImageView img_page5 = (ImageView)findViewById(R.id.img_page5) ;
        final ImageView img_page6 = (ImageView)findViewById(R.id.img_page6) ;

        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {

                switch (position) {
                    case 0:
                        img_page1.setImageResource(R.drawable.dot_selected);
                        img_page2.setImageResource(R.drawable.dot);
                        img_page3.setImageResource(R.drawable.dot);
                        img_page4.setImageResource(R.drawable.dot);
                        img_page5.setImageResource(R.drawable.dot);
                        img_page6.setImageResource(R.drawable.dot);
                        break;

                    case 1:
                        img_page1.setImageResource(R.drawable.dot);
                        img_page2.setImageResource(R.drawable.dot_selected);
                        img_page3.setImageResource(R.drawable.dot);
                        img_page4.setImageResource(R.drawable.dot);
                        img_page5.setImageResource(R.drawable.dot);
                        img_page6.setImageResource(R.drawable.dot);
                        break;

                    case 2:
                        img_page1.setImageResource(R.drawable.dot);
                        img_page2.setImageResource(R.drawable.dot);
                        img_page3.setImageResource(R.drawable.dot_selected);
                        img_page4.setImageResource(R.drawable.dot);
                        img_page5.setImageResource(R.drawable.dot);
                        img_page6.setImageResource(R.drawable.dot);
                        break;

                    case 3:
                        img_page1.setImageResource(R.drawable.dot);
                        img_page2.setImageResource(R.drawable.dot);
                        img_page3.setImageResource(R.drawable.dot);
                        img_page4.setImageResource(R.drawable.dot_selected);
                        img_page5.setImageResource(R.drawable.dot);
                        img_page6.setImageResource(R.drawable.dot);
                        break;

                    case 4:
                        img_page1.setImageResource(R.drawable.dot);
                        img_page2.setImageResource(R.drawable.dot);
                        img_page3.setImageResource(R.drawable.dot);
                        img_page4.setImageResource(R.drawable.dot);
                        img_page5.setImageResource(R.drawable.dot_selected);
                        img_page6.setImageResource(R.drawable.dot);
                        break;

                    case 5:
                        img_page1.setImageResource(R.drawable.dot);
                        img_page2.setImageResource(R.drawable.dot);
                        img_page3.setImageResource(R.drawable.dot);
                        img_page4.setImageResource(R.drawable.dot);
                        img_page5.setImageResource(R.drawable.dot);
                        img_page6.setImageResource(R.drawable.dot_selected);
                        break;

                    default:
                        break;
                }


            }

            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {

            }

            @Override
            public void onPageScrollStateChanged(int arg0) {

            }
        });
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 xmlns:tools="http://schemas.android.com/tools"
 android:id="@+id/activity_login"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 tools:context="プロジェクト名.MainActivity">

 <android.support.v4.view.ViewPager
 android:id="@+id/viewPager"
 android:layout_width="match_parent"
 android:layout_height="match_parent" />

 <LinearLayout
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:layout_alignBottom="@+id/bottomLiner"
 android:gravity="center"
 android:layout_alignWithParentIfMissing="true"
 android:layout_centerHorizontal="true"
 android:paddingTop="250dp"
 >

 <ImageView
 android:layout_width="@dimen/dots_height"
 android:layout_height="wrap_content"
 android:id="@+id/img_page1"
 android:src="@drawable/dot_selected"
 android:scaleType="fitCenter"
 android:paddingLeft="@dimen/dots_margin"
 android:paddingRight="@dimen/dots_margin"
 />
 <ImageView
 android:layout_width="@dimen/dots_height"
 android:layout_height="wrap_content"
 android:id="@+id/img_page2"
 android:scaleType="fitCenter"
 android:src="@drawable/dot"
 android:paddingLeft="@dimen/dots_margin"
 android:paddingRight="@dimen/dots_margin"
 />
 <ImageView
 android:layout_width="@dimen/dots_height"
 android:layout_height="wrap_content"
 android:id="@+id/img_page3"
 android:scaleType="fitCenter"
 android:src="@drawable/dot"
 android:paddingLeft="@dimen/dots_margin"
 android:paddingRight="@dimen/dots_margin"
 />
 <ImageView
 android:layout_width="@dimen/dots_height"
 android:layout_height="wrap_content"
 android:id="@+id/img_page4"
 android:scaleType="fitCenter"
 android:src="@drawable/dot"
 android:paddingLeft="@dimen/dots_margin"
 android:paddingRight="@dimen/dots_margin"
 />
 <ImageView
 android:layout_width="@dimen/dots_height"
 android:layout_height="wrap_content"
 android:id="@+id/img_page5"
 android:scaleType="fitCenter"
 android:src="@drawable/dot"
 android:paddingLeft="@dimen/dots_margin"
 android:paddingRight="@dimen/dots_margin"
 />
 <ImageView
 android:layout_width="@dimen/dots_height"
 android:layout_height="wrap_content"
 android:id="@+id/img_page6"
 android:scaleType="fitCenter"
 android:src="@drawable/dot"
 android:paddingLeft="@dimen/dots_margin"
 android:paddingRight="@dimen/dots_margin"
 />

 </LinearLayout>

</RelativeLayout>

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です