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}}
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을 조합한 디자인을 구축하는 법에 대해 알아보았습니다.