Android Jetpack ViewPager2 기본 개념 및 샘플 코드
오늘은 안드로이드 개발에 있어서 굉장히 유용한 컴포넌트 중 하나인 ViewPager2에 대해 이야기해볼까 합니다. ViewPager2는 사용자 인터페이스에서 여러 화면을 좌우로 스와이프하여 넘길 수 있게 해주는 아주 멋진 라이브러리인데요. 기본 개념부터 시작해서 간단한 샘플 코드까지, 함께 알아보도록 할게요!
Android Jetpack ViewPager2 소개
Android Jetpack의 일부인 ViewPager2는 안드로이드 기기에서 화면을 전환하는 라이브러리입니다. 이전 버전인 ViewPager에 비해 성능과 유연성이 개선되었습니다.
ViewPager2는 RecyclerView와 같은 어댑터 뷰(Adapter View)로, 데이터 소스(DataSource)로부터 페이지를 가져와 표시합니다. 각 페이지는 Fragment 또는 Activity로 구성될 수 있습니다.
주요 특징은 다음과 같습니다.
- 성능 향상: ViewPager2는 RecyclerView와 동일한 RecyclerView 엔진을 사용하므로 스크롤링 및 페이지 전환이 부드럽고 빠릅니다.
- 유연성: 수직 및 수평 스크롤을 지원하며, 페이지 크기를 동적으로 조정할 수 있습니다. 멀티 터치 및 제스처를 처리하는 방식을 커스터마이징 할 수도 있습니다.
- API 단순화: API가 직관적이고 간단하여 사용하기 쉽습니다. 기존의 ViewPager와 달리 데이터 바인딩 및 LiveData를 지원합니다.
다음은 간단한 ViewPager2 구현 예시입니다.
public class MainActivity extends AppCompatActivity { private ViewPager2 viewPager; private MyPageAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); viewPager = findViewById(R.id.viewpager); adapter = new MyPageAdapter(this); viewPager.setAdapter(adapter); } }
class MyPageAdapter extends FragmentStateAdapter { public MyPageAdapter(@NonNull FragmentActivity fragmentActivity) { super(fragmentActivity); } @NonNull @Override public Fragment createFragment(int position) { return PageFragment.newInstance(position); } @Override public int getItemCount() { return 3; //페이지 수 } }
ViewPager2의 기능적 특성 이해하기
안드로이드 앱 개발에서 ViewPager2는 탭 형태의 인터페이스나 갤러리 인터페이스를 만드는데 유용한 도구 입니다. 아래에서는 ViewPager2의 주요 기능적 특성을 살펴 보겠습니다.
1.부드러운 스크롤링과 빠른 페이지 전환: ViewPager2는 RecyclerView와 같은 엔진을 사용하여 부드러운 스크롤링과 빠른 페이지 전환을 제공합니다. 이로 인해 사용자는 인터랙션 동안 원활한 경험을 할 수 있습니다.
2.직관적인 API: ViewPager2의 API는 간단하고 직관적이므로 쉽게 사용할 수 있습니다. XML 레이아웃 파일에서 간단히 참조하거나 Java 코드에서 인스턴스화 할 수 있습니다.
3.다양한 방향의 스크롤 지원: ViewPager2는 전통적인 수평 스크롤 뿐만 아니라 수직 스크롤도 지원합니다. 이를 통해 보다 다양한 UI 디자인을 구현할 수 있습니다.
4.동적 페이지 크기 조정: ViewPager2는 페이지 크기를 동적으로 조정할 수 있는 기능을 제공합니다. 이는 화면 크기나 디바이스 종류에 따라 페이지 크기를 적절하게 조정하는데 유용합니다.
5.멀티 터치 및 제스처 처리: ViewPager2는 멀티 터치 및 제스처를 처리하는 강력한 기능을 가지고 있습니다. 사용자가 손가락을 이용하여 페이지를 스와이프하거나 드래그 할 때 이를 인식하고 반응합니다.
ViewPager2 구현을 위한 준비사항
뷰 페이저2를 프로젝트에 추가하려면 다음 단계를 따르세요:
1.build.gradle (Module: app) 파일에 의존성 추가: 뷰 페이저2 라이브러리를 사용하려면 프로젝트의 build.gradle (Module: app) 파일에 androidX 패키지 종속성을 추가해야 합니다.
dependencies { implementation 'androidx.viewpager2:viewpager2:1.1.0' }
android:id="@+id/view_pager" android:layout_width="match_parent" android:layout_height="match_parent"/>
다음은 간단한 ViewPager2 예제 코드입니다.
public class MainActivity extends AppCompatActivity { private ViewPager2 viewPager; private MyAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); viewPager = findViewById(R.id.view_pager); adapter = new MyAdapter(this); viewPager.setAdapter(adapter); } public class MyAdapter extends RecyclerView.Adapter { private List dataSet; public MyAdapter(Context context) { dataSet = new ArrayList<>(); for (int i = 0; i < 10; i++) { dataSet.add("Item " + i); } } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { LayoutInflater inflater = LayoutInflater.from(parent.getContext()); View view = inflater.inflate(R.layout.item_view, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { holder.textView.setText(dataSet.get(position)); } @Override public int getItemCount() { return dataSet.size(); } public class ViewHolder extends RecyclerView.ViewHolder { TextView textView; public ViewHolder(@NonNull View itemView) { super(itemView); textView = itemView.findViewById(R.id.text_view); } } } }
페이지 전환 효과와 커스터마이징
기본적으로 ViewPager2는 페이지 전환 시 부드럽게 미끄러지는 효과를 제공합니다. 하지만 이 효과를 사용하지 않거나, 다른 효과로 변경하거나, 추가적인 애니메이션을 적용하여 페이지 전환을 커스터마이징 할 수도 있습니다.
- 전환 효과:
사용하지 않으려면 setPageTransformer(false)를 호출합니다. 원하는 효과를 직접 구현하려면 setPageTransformer() 메소드에 ViewPager2.PageTransformer 인터페이스를 구현한 객체를 전달합니다.