2010-06-17 8 views
0

사용자가 선택할 수있는 숫자 목록이있는 ScrollView를 만들려고합니다. 사용자가 터치하고 스크롤 한 후 손가락을 떼면 스크롤이 ScrollView의 중간에있는 항목에 "스냅"되어 출력됩니다. 내 ScrollView에는 TextView 객체가 포함 된 세로 선형 레이아웃이 포함되어 있습니다. ScrollView의 수직 크기는 약 60sp입니다.터치 한 후 ScrollView의 위치를 ​​변경하는 방법은 무엇입니까?

나는 이것이 ACTION_UP과 함께 ScrollView.onTouch를 포함 할 것이라고 생각하지만 사용 방법을 모른다. 또한 목록의 위치를 ​​기반으로 항목의 색인 또는 값을 가져 오는 방법이 있습니까?

감사합니다.

답변

0

ListView를 사용하고 있습니까? 하나를 시작하려면 Hello ListView을 참조하십시오. 중간에있는 항목을 정확히 말하면 무슨 뜻인지 잘 모르겠지만 ListView를 스크롤 할 때 항상 listView의 상단이 항목의 맨 위에 정렬됩니다.

항목의 인덱스 또는 위치에 대해 ListView 항목에는 두 가지 개념이 있습니다. 위치는 전체 목록 (일반적으로 ListView를 채우는 데 사용 된 ArrayAdapter)에서 항목의 위치입니다. id는 화면의 보이는 위치입니다. 따라서 화면의 최상위 항목이 0이지만 위치 20을 가질 수 있습니다. Javadocs

+0

지금 당장 제가하고있는 일은 linearLayout을 자식으로하여 ScrollView를 만드는 것입니다. LinearLayout 내부에는 수많은 숫자 (100,125,150 ... 1000)가 있습니다. 사용자는 손가락을 터치하고 원하는 숫자가 가운데에 가장 가까운 (또는 가장 가까운) 위치로 끌 수 있습니다. 손가락을 제거한 후 ACTION_UP을 누르면 가운데에 가장 가까운 번호가 가운데로 정확히 매겨지고 (smoothScrollTo를 통해) 중간 번호가 선택되어 사용됩니다. 그게 내가하려는 일이야. – Matt

+0

저는 지금 일종의 작업을하고 있습니다. 내가하고있는 일은 1) ACTION_UP에서 .getScrollY()를 사용하여 ScrollView의 현재 위치를 얻습니다. 2) 원하는 스크롤 위치를 얻기 위해 몇 가지 수학을 사용합니다. ((int) Math.round (posY/20) * 20) + 10 숫자 20은 항목 사이의 대략적인 거리이고 10은 중간에 대한 오프셋입니다 . 3) smoothScroll을 사용하여 이동합니다. 4)리스트에서 중간에 위치하는 숫자를 파악하기 위해 수학을 사용합니다. 5) (TextView) findViewById (R.id. (listview.getChildAt (x) .getId()))를 사용하여 텍스트보기를 얻습니다. 6) 텍스트를 int로 변환합니다. – Matt

+0

다행니다. ListView를 사용하고 싶지 않은 이유가 있습니까? 그것은 scrollView보다 귀하의 상황에 더 적합한 것 같습니다. 또한 픽셀 수학에 의존합니까? 각기 다른 전화는 해상도가 다르므로 문제가 발생할 수 있습니다. –

관련 문제