ViewPager에서 페이지 전환 애니메이션을 변경하는 방법은 무엇인가요?
_____A1: ViewPager의 기본 페이지 전환 효과는 슬라이드 방식입니다. 이를 변경하려면 `ViewPager.PageTransformer` 인터페이스를 구현하고, `ViewPager.setPageTransformer()` 메서드에 적용하면 됩니다. 이 인터페이스는 페이지가 전환될 때 호출되어 각 페이지의 애니메이션 효과를 지정할 수 있습니다.
---
Q2: PageTransformer는 어떻게 구현하나요?
A2: `PageTransformer`는 `transformPage(View page, float position)` 메서드를 통해 페이지마다 애니메이션을 적용합니다.
- `page`: 현재 페이지 view
- `position`: 현재 페이지의 위치 정보로, 0은 중앙 현재 페이지, -1은 바로 왼쪽 페이지, 1은 바로 오른쪽 페이지 등입니다.
예시:
```java
public class DepthPageTransformer implements ViewPager.PageTransformer {
private static final float MIN_SCALE = 0.75f;
public void transformPage(View view, float position) {
if (position < -1) { // 왼쪽 밖
view.setAlpha(0);
} else if (position <= 0) { // 왼쪽 페이지 & 현재 페이지
view.setAlpha(1);
view.setTranslationX(0);
view.setScaleX(1);
view.setScaleY(1);
} else if (position <= 1) { // 오른쪽 페이지
view.setAlpha(1 - position);
view.setTranslationX(view.getWidth() * -position);
float scaleFactor = MIN_SCALE + (1 - MIN_SCALE) * (1 - position);
view.setScaleX(scaleFactor);
view.setScaleY(scaleFactor);
} else { // 오른쪽 밖
view.setAlpha(0);
}
}
}
```
Q3: 구현한 PageTransformer를 ViewPager에 적용하는 방법은?
A3: 다음처럼 `ViewPager.setPageTransformer()`를 호출해서 적용합니다.
```java
viewPager.setPageTransformer(true, new DepthPageTransformer());
```
첫 번째 파라미터는 애니메이션 시 스크롤 모양을 부드럽게 할지 여부이며, 보통 `true`를 사용합니다.
---
Q4: ViewPager2에서도 동일하게 적용할 수 있나요?
A4: 네, ViewPager2도 `ViewPager2.setPageTransformer()` 메서드를 통해 같은 방식으로 애니메이션을 지정할 수 있습니다. 단, ViewPager2는 RecyclerView 기반이므로 페이지 뷰를 직접 애니메이션 처리합니다. 구현법은 거의 동일합니다.
---
Q5: 별도로 제공되는 기본 Transformers가 있나요?
A5: 공식적으로 기본 제공되진 않지만, 구글 예제와 다양한 오픈소스에서 대표적인 애니메이션 효과 예시를 제공합니다. 대표적으로:
- DepthPageTransformer: 깊이감 효과
- ZoomOutPageTransformer: 축소하며 페이드 아웃
- FadePageTransformer: 페이드 효과
- RotatePageTransformer 등 다양한 커스텀 변형 가능
---
Q6: 페이지 전환 애니메이션을 없애고 싶다면?
A6: `setPageTransformer(false, null)`로 설정하면 기본 애니메이션을 제거할 수 있습니다. 또는 transformPage 내에서 위치에 따라 모든 애니메이션 속성을 초기 상태로 설정해 애니메이션을 무효화할 수도 있습니다.
---
정리:
1. `ViewPager.PageTransformer`를 구현한다.
2. `transformPage(View page, float position)` 메서드에 애니메이션 코드를 작성한다.
3. `ViewPager.setPageTransformer()`를 통해 적용한다.
4. ViewPager2도 동일 메서드로 적용 가능하다.
이를 통해 슬라이드 외에도 다양한 전환 효과를 쉽게 커스터마이징 할 수 있습니다.
작성자:
김지수 [비회원]
| 작성일자: 1년 전
2025-04-03 07:00:58
조회수: 105 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 105 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.