classBlankFragment:Fragment(){privatevar_binding:FragmentBlankBinding?=nullprivatevalbindingget()=_binding!!overridefunonCreateView(inflater:LayoutInflater,container:ViewGroup?,savedInstanceState:Bundle?,):View?{// Inflate the layout for this fragment
_binding=FragmentBlankBinding.inflate(inflater,container,false)returnbinding.root}overridefunonDestroyView(){super.onDestroyView()_binding=null}overridefunonViewCreated(view:View,savedInstanceState:Bundle?){binding.textview.text=param1}}
ViewPager2의 PagerAdapter 작성
방금 작성한 프래그먼트에 텍스트를 전해주는 ViewPager2 어댑터를 작성합니다. 여기서는 3개의 페이지를 갖도록 하겠습니다.
ViewPager 어댑터 클래스의 인스턴스를 만들어 ViewPager 어댑터 속성에 연결시킵니다. 그리고 TabLayoutMediator를 이용해서 TabLayout과 ViewPager를 연결합니다. 각 탭의 타이틀과 아이콘은 블럭내부에서 지정할 수 있습니다. 탭의 이름은 Title 0 형식으로 지정하고 아이콘은 벡터 이미지를 추가한 뒤 setIcon 에서 불러오도록 하였습니다.
ViewPager에서는 페이지를 변경할때 여러가지 효과를 줄 수 있습니다. 구글에서 공개하는 ZoomOutPageTransformer를 사용한다면 스크롤할때 페이지가 축소되면서 페이드아웃되고, 페이지가 중앙에 가까워지면 원래 크기로 다시 커지면서 페이드인 되는 효과를 낼 수 있습니다.
privateconstvalMIN_SCALE=0.85fprivateconstvalMIN_ALPHA=0.5fclassZoomOutPageTransformer:ViewPager2.PageTransformer{overridefuntransformPage(view:View,position:Float){view.apply{valpageWidth=widthvalpageHeight=heightwhen{position<-1->{// [-Infinity,-1)
// This page is way off-screen to the left.
alpha=0f}position<=1->{// [-1,1]
// Modify the default slide transition to shrink the page as well
valscaleFactor=max(MIN_SCALE,1-abs(position))valvertMargin=pageHeight-(1-scaleFactor)/2valhorzMargin=pageWidth-(1-scaleFactor)/2translationX=if(position<0){horzMargin-vertMargin/2}else{horzMargin+vertMargin/2}// Scale the page down (between MIN_SCALE and 1)
scaleX=scaleFactorscaleY=scaleFactor// Fade the page relative to its size.
alpha=(MIN_ALPHA+(((scaleFactor-MIN_SCALE)/(1-MIN_SCALE))-(1-MIN_ALPHA)))}else->{// (1,+Infinity]
// This page is way off-screen to the right.
alpha=0f}}}}}// MainActivity
binding.viewpager.apply{setPageTransformer(ZoomOutPageTransformer())}
이렇게 해서 ViewPager2와 TabLayout을 조합한 디자인을 구축하는 법에 대해 알아보았습니다.