HorizontalScrollView 내에서 특정 아이템으로 스크롤하는 방법은?

_____
Q: HorizontalScrollView 내에서 특정 아이템으로 스크롤하려면 어떻게 해야 하나요?

A: HorizontalScrollView는 RecyclerView나 ViewPager와 달리 아이템 단위 스크롤 기능을 기본 제공하지 않습니다. 따라서 특정 아이템 위치로 스크롤하려면 다음과 같은 방법을 사용합니다.

1. 뷰의 좌표를 직접 얻어 스크롤하기
- 특정 아이템(View)의 `left` 좌표(또는 오른쪽 기준 `right` 좌표)를 구합니다.
- `horizontalScrollView.smoothScrollTo(x, y)` 메서드를 호출하여 해당 좌표로 스크롤합니다.

```java
View targetView = findViewById(R.id.target_item);
int scrollToX = targetView.getLeft();
horizontalScrollView.smoothScrollTo(scrollToX, 0);
```

2. 포지션 기반 아이템을 찾는 경우
- 만약 아이템이 여러 개 동적으로 생성된 LinearLayout 등의 자식뷰라면, 원하는 포지션의 자식을 찾아 좌표를 구합니다.
```java
LinearLayout container = findViewById(R.id.container);
View itemView = container.getChildAt(position);
horizontalScrollView.smoothScrollTo(itemView.getLeft(), 0);
```

3. scrollBy 혹은 scrollTo 사용
- 위치 계산이 어려운 경우 현재 스크롤 위치를 기준으로 상대적인 거리만큼 `scrollBy(dx, 0)` 또는 절대 좌표로 `scrollTo(x, y)`를 사용할 수도 있습니다.

4. 스크롤이 부드럽게 되도록 하기
- `smoothScrollTo()`를 사용하면 자동으로 부드럽게 스크롤 됩니다.
- `scrollTo()`는 즉시 이동하므로 원하는 UX에 맞게 선택하세요.

5. 주의사항
- 뷰가 아직 레이아웃이 완료되지 않아 좌표를 알 수 없는 경우가 있으므로, 스크롤 코드를 `view.post{}` 또는 `ViewTreeObserver` 콜백으로 실행해야 안전합니다.
```java
view.post(() -> {
horizontalScrollView.smoothScrollTo(view.getLeft(), 0);
});
```

---

정리하면, HorizontalScrollView에서는 특정 아이템 뷰의 Left 위치를 기준으로 `smoothScrollTo()`를 호출하여 스크롤 위치를 지정하는 것이 일반적인 방법입니다.
`HorizontalScrollView` 내에서 특정 아이템으로 스크롤하는 방법에 대해 설명하겠습니다.

Android에서 `HorizontalScrollView`를 사용할 때, 특정 위치로 스크롤하기 위해서는 몇 가지 방법이 있습니다.

일반적인 방법은 `scrollTo()` 또는 `smoothScrollTo()` 메서드를 사용하는 것입니다.

아래는 `HorizontalScrollView`를 사용하여 특정 아이템으로 스크롤하는 예제입니다.

1단계: 레이아웃 구성 먼저, `HorizontalScrollView`와 그 안에 포함될 `LinearLayout`을 XML 레이아웃 파일에 정의합니다.

```xml ``` 2단계: 코드에서 스크롤 구현 이제 Java 또는 Kotlin에서 특정 아이템으로 스크롤하는 방법을 구현합니다.

예를 들어, 두 번째 아이템으로 스크롤하고 싶다고 가정합니다.

Java 코드 예제: ```java HorizontalScrollView horizontalScrollView = findViewById(R.id.horizontalScrollView); LinearLayout container = findViewById(R.id.container); // 원하는 아이템의 인덱스 (예: 1은 두 번째 아이템) int targetItemIndex = 1; // 아이템의 너비를 가져오고 스크롤합니다.

TextView targetItem = (TextView) container.getChildAt(targetItemIndex); int scrollX = targetItem.getLeft(); horizontalScrollView.smoothScrollTo(scrollX, 0); ``` Kotlin 코드 예제: ```kotlin val horizontalScrollView = findViewById(R.id.horizontalScrollView) val container = findViewById(R.id.container) // 원하는 아이템의 인덱스 (예: 1은 두 번째 아이템) val targetItemIndex = 1 // 아이템의 너비를 가져오고 스크롤합니다.

val targetItem = container.getChildAt(targetItemIndex) as TextView val scrollX = targetItem.left horizontalScrollView.smoothScrollTo(scrollX, 0) ``` 3단계: 결과 확인 위 코드를 실행하면, `HorizontalScrollView`가 특정 아이템으로 자연스럽게 스크롤됩니다.

`smoothScrollTo()` 메서드를 사용하면 부드러운 애니메이션 효과로 스크롤이 이루어집니다.

만약 즉각적인 스크롤을 원한다면 `scrollTo()` 메서드를 사용하면 됩니다.

이와 같은 방법으로 `HorizontalScrollView`에서 원하는 아이템으로 스크롤할 수 있습니다.

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