2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

ViewPager에서 스와이프를 비활성화하려면 어떻게 하나요?

_____
Q: ViewPager에서 사용자의 스와이프(좌우 슬라이드)를 비활성화하려면 어떻게 해야 하나요?

A: ViewPager의 기본 동작은 사용자의 손가락 스와이프로 페이지를 이동시키는 것입니다. 하지만 이 기능을 비활성화하고 싶다면, ViewPager를 상속하여 touch 이벤트를 직접 제어하는 방법이 일반적입니다. 아래 방법들을 참고하세요.

---

1. 커스텀 ViewPager 만들기 (스와이프 비활성화)

```java
public class NoSwipeViewPager extends ViewPager {

public NoSwipeViewPager(Context context) {
super(context);
}

public NoSwipeViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}

// 터치 이벤트 처리 안함
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
// 스와이프를 막기 위해 항상 false 반환
return false;
}

@Override
public boolean onTouchEvent(MotionEvent event) {
// 터치 시 아무 동작 하지 않고 false 반환
return false;
}
}
```

- `onInterceptTouchEvent`에서 false를 반환하면 ViewPager가 터치 이벤트를 가로채지 않아 스와이프가 불가능해집니다.
- `onTouchEvent`에서도 false 반환으로 명시적으로 터치 동작을 없앱니다.

---

2. XML 레이아웃에서 커스텀 ViewPager 사용하기

```xml
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
```

패키지 이름을 자신의 앱에 맞게 변경하세요.

---

3. 기존 ViewPager에 임시로 스와이프 비활성화하기 (추천하지 않음)

- ViewPager 내부 동작 수정(API 21 이상 가능)이 어렵고 권장되지 않습니다.
- 커스텀 클래스를 만들어 사용하는 게 안전하며 유지보수에도 좋습니다.

---

4. 추가 팁

- 버튼이나 프로그래밍 방식으로 `setCurrentItem(int item, boolean smoothScroll)` 메서드를 사용해 페이지 전환을 하면서, 사용자의 스와이프만 막을 경우에 유용합니다.
- 만약 ViewPager2를 사용하는 경우, `setUserInputEnabled(false)`로 간단하게 스와이프를 비활성화할 수 있습니다.

```java
viewPager2.setUserInputEnabled(false);
```

---

요약: 기존 ViewPager에서는 상속 클래스 생성 후 `onInterceptTouchEvent()`와 `onTouchEvent()`에서 false를 반환해 스와이프를 비활성화하는 방법이 표준이고 가장 널리 사용됩니다. ViewPager2 사용자라면 `setUserInputEnabled(false)`만 호출하면 끝납니다.
Android의 `ViewPager`에서 스와이프를 비활성화하려면, `ViewPager`의 터치 이벤트를 차단하는 커스텀 클래스를 작성해야 합니다.

기본적인 방법은 `ViewPager`를 상속받아 onTouchEvent 메서드를 재정의하거나, `setOnTouchListener`를 설정하는 것입니다.

아래는 `ViewPager`의 스와이프를 비활성화하기 위한 두 가지 방법입니다.

방법 1: 커스텀 ViewPager 생성 1. `ViewPager`를 상속받는 클래스를 생성합니다.



2. `onTouchEvent`와 `onInterceptTouchEvent` 메서드를 오버라이드하여 터치 이벤트를 처리하지 않도록 합니다.

```java import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; import androidx.viewpager.widget.ViewPager; public class NonSwipeableViewPager extends ViewPager { public NonSwipeableViewPager(Context context) { super(context); } public NonSwipeableViewPager(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { // 항상 false를 반환하여 스와이프를 비활성화합니다.

return false; } @Override public boolean onTouchEvent(MotionEvent ev) { // 아무런 작업도 하지 않아 터치를 무시합니다.

return false; } } ``` 이제 XML 레이아웃 파일에서 `NonSwipeableViewPager`를 사용하면 됩니다.

```xml ``` 방법 2: setOnTouchListener 사용 또는 기존의 `ViewPager`에 `setOnTouchListener`를 설정하여 터치 이벤트를 무시할 수 있습니다.

```java ViewPager viewPager = findViewById(R.id.viewPager); viewPager.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // 항상 true를 반환하여 모든 터치 이벤트를 소비합니다.

return true; } }); ``` 이 방법을 사용하면 `ViewPager`의 기본 스와이프 기능이 비활성화됩니다.

결론 위의 두 방법 중에서 선택하여 `ViewPager`의 스와이프 기능을 비활성화 할 수 있습니다.

첫 번째 방법은 커스텀 클래스를 작성하여 보다 깔끔한 솔루션을 제공하고, 두 번째 방법은 기존 클래스를 그대로 사용하면서 간단하게 스와이프를 비활성화할 수 있는 방법입니다.

필요에 따라 적절한 방법을 선택해 사용하시면 됩니다.

작성자: 이윤지 [비회원] | 작성일자: 1년 전 2025-04-03 07:01:11
조회수: 127 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.