[android] ViewPagerで横スクロールのView切り替え+iOSのPageControll(ドット)実装
目次
ViewPagerで横スクロールのView切り替え+iOSのPageControll(ドット)実装
横スクロールするスライドをViewPagerで実装し
且つ、iOSのPageControllのようなドット表示機能を実装する
各スライド(写真)のFragmentを作成し、FragmentPagerAdapterでそれぞれのスライドを管理させ、FragmentPagerAdapterをViewPagerに実装させることで実現
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>