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

HorizontalScrollView에서 버튼 클릭 시 스크롤 효과를 주는 방법은?

_____
Q1: HorizontalScrollView에서 버튼 클릭 시 특정 위치로 스크롤하려면 어떻게 해야 하나요?
A1: 버튼 클릭 이벤트 내에서 `scrollView.smoothScrollTo(x, y)` 또는 `scrollView.scrollTo(x, y)` 메서드를 호출하면 됩니다. 예를 들어, 스크롤뷰 내의 특정 뷰 위치로 스크롤하기 위해서는 다음과 같이 작성할 수 있습니다.

```java
button.setOnClickListener(v -> {
// 스크롤 위치 x, y (대개 y는 0)
int x = targetView.getLeft();
scrollView.smoothScrollTo(x, 0);
});
```

`smoothScrollTo`는 부드러운 스크롤 효과를 주며 `scrollTo`는 즉시 위치로 이동합니다.

---

Q2: 특정 버튼을 클릭했을 때 HorizontalScrollView가 좌우로 일정 거리씩 이동하게 하려면?
A2: 현재 스크롤 위치를 구한 뒤, 이동할 거리만큼 좌우 값을 더하거나 빼서 `smoothScrollTo`를 호출합니다.

```java
buttonRight.setOnClickListener(v -> {
int currentX = scrollView.getScrollX();
int scrollAmount = 200; // 200px 오른쪽으로 이동
scrollView.smoothScrollTo(currentX + scrollAmount, 0);
});

buttonLeft.setOnClickListener(v -> {
int currentX = scrollView.getScrollX();
int scrollAmount = 200; // 200px 왼쪽으로 이동
scrollView.smoothScrollTo(Math.max(currentX - scrollAmount, 0), 0);
});
```

---

Q3: 스크롤뷰가 완전히 렌더링된 후에 스크롤을 이동시키려면 어떻게 해야 하나요?
A3: 스크롤 위치 변경 시점이 뷰가 아직 레이아웃되지 않은 상태라면 스크롤이 제대로 동작하지 않을 수 있습니다. 따라서 `post` 메서드를 사용하거나 `ViewTreeObserver`의 `OnGlobalLayoutListener`를 이용하여 레이아웃 완료 후에 스크롤을 이동시킵니다.

```java
scrollView.post(() -> {
scrollView.smoothScrollTo(targetView.getLeft(), 0);
});
```

---
Q4: Android XML에서 HorizontalScrollView 안에 버튼들이 있을 때, 버튼 클릭 시 해당 버튼이 중앙으로 스크롤 되게 하려면?
A4: 선택한 버튼을 센터에 위치시키려면, 스크롤뷰의 너비와 버튼의 x 위치 및 너비를 이용하여 계산해야 합니다.

```java
button.setOnClickListener(v -> {
int scrollViewWidth = scrollView.getWidth();
int buttonLeft = v.getLeft();
int buttonWidth = v.getWidth();

int scrollToX = buttonLeft + buttonWidth / 2 - scrollViewWidth / 2;
scrollToX = Math.max(scrollToX, 0); // 음수 방지

scrollView.smoothScrollTo(scrollToX, 0);
});
```

---

Q5: Kotlin에서 HorizontalScrollView 버튼 클릭 시 스크롤을 구현하는 예시는?
A5: Kotlin 코틀린에서도 비슷하며 람다식을 이용할 수 있습니다.

```kotlin
button.setOnClickListener {
val scrollViewWidth = scrollView.width
val buttonLeft = it.left
val buttonWidth = it.width

val scrollToX = (buttonLeft + buttonWidth / 2 - scrollViewWidth / 2).coerceAtLeast(0)
scrollView.smoothScrollTo(scrollToX, 0)
}
```

---

Q6: 여러 버튼 중 선택한 버튼으로 스크롤하려는데, 스크롤을 자연스럽게 하지 않고 즉시 이동하고 싶을 때는?
A6: `smoothScrollTo(x, y)` 대신에 `scrollTo(x, y)` 메서드를 사용하면 즉시 해당 위치로 이동합니다.

---

Q7: 스크롤 이동 후 특정 작업을 실행하려면 어떻게 해야 하나요?
A7: `HorizontalScrollView` 자체에 스크롤 완료 콜백은 없으므로 직접 감지하기 어렵습니다. 대신 `Handler`를 이용해 딜레이 후 작업하거나, 커스텀 스크롤뷰를 만들어 `OverScroller` 콜백을 오버라이드할 수도 있습니다. 간단한 경우는 몇백 밀리초 후에 작업하면 됩니다.

---

이와 같이 `HorizontalScrollView`에서 버튼 클릭 시 스크롤 효과를 주기 위해서는 `scrollTo` 또는 `smoothScrollTo` 메서드를 활용하고, 스크롤 위치 계산을 적절히 해 주는 것이 핵심입니다.
HorizontalScrollView에서 버튼 클릭 시 스크롤 효과를 주는 방법은 여러 가지가 있습니다.

아래는 Android의 `HorizontalScrollView`를 사용하여 버튼 클릭 시 특정 위치로 스크롤하는 방법에 대한 단계별 설명입니다.

단계 1: 레이아웃 구성 1. `res/layout` 폴더 안에 XML 파일을 생성하거나 기존의 레이아웃 파일에 다음과 같은 구조를 추가하세요.

```xml
작성자: 김주영 [비회원] | 작성일자: 1년 전 2025-04-19 11:21:06
조회수: 117 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.