2011-03-15 2 views
4

스크롤없이 뷰를 프로그래밍 방식으로 강제로 스크롤 할 수 있습니까?Java에서 스크롤 뷰를 사용하여 뷰를 스크롤하지 않도록 설정하는 방법

연락처 목록의 알파벳순 이름과 같습니다. 첫 번째 이름이 'A'로 시작하는 모든 연락처 목록을 스크롤하면 'A'막대가 스크롤되지 않습니다. 사용자가 'A'가 끝날 때까지 스크롤하면 'B'표시 줄이 ScrollView의 아래쪽에서 단순히 위로 스크롤되어 마침내 'A'를 맨 위의 위치로 바꾸고 거기에 머물러있게됩니다.

제 설명은 추상적입니다. 이해해 주시기 바랍니다.

미리 감사드립니다.

답변

3

연락처 목록은 ListView를 사용하며 ScrollView는 사용하지 않습니다. 내가 할 수 있다고 생각하는 한 가지 방법은 상단에 고정 된 헤더를 갖는 것입니다. 화면에 표시되는 내용에 따라 내용을 변경할 수 있습니다.

OnScrollListener을 ListView에 연결하십시오. onScroll의 첫 번째 보이는 위치에서 뷰를 가져옵니다. 그런 다음보기의 내용에 따라 머리글의 내용을 변경하십시오.

목록의 첫 번째 섹션에 대해 ListView에 머리글을 추가 할 필요가 없습니다. 목록의 첫 번째 섹션은 이미 ScrollListener에서 처리되므로 머리글을 추가 할 필요가 없습니다. 헤더 열의 스타일과 상단의 뷰를 동일하게 유지하면 고정 헤더에 대한 환상을 갖게됩니다.

+0

나는 당신이 의미하는 바를 알고있다 : ScrollView 외부의 상단에 고정 된 헤더 뷰와 ScrollView 내의 다른 스콜링 헤더 뷰를 가지고있다. 스크롤하는 머리글보기가 맨 위에 오면 고정 머리글보기의 텍스트를 변경하십시오. +1 아이디어, 아직 누군가가 내 질문에 대한 해결책을 가지고 있기를 바랍니다. –

2

"섹션 ​​헤더"가있는 "정적 텍스트"접근 방식이 ScrollView에서 필요하다고 생각합니다. 목록에 "A", "B"등의 문자가 포함 된 사용 불가/클릭 할 수없는 항목이 있어야합니다. 섹션 헤더가 뷰의 위쪽으로 스크롤되고, ScrollView 위의 정적 TextView의 내용이 헤더의 내용으로 변경됩니다. 즉, "B"머리글 항목이 스크롤되지 않으면 TextView에 "B"가 포함됩니다.

"힘든 부분은"섹션 헤더 "가 맨 위를 벗어나거나 반대 방향으로 스크롤 할 때 감지됩니다.

보너스 포인트를 얻으려면 내용이 변경 될 때 TextView에서 "밀어 올리기"애니메이션을 사용하여 목록 항목이 TextView로 롤링되는 것처럼 보이게하십시오. ("... \ view \ Animation2.java"의 SDK에있는 API 데모 애플리케이션에이 애니메이션 예제가 있습니다.)

업데이트 : 스크롤 이벤트를 감지하는 방법을 볼 수

android.widget.AbsListView.OnScrollListener 인터페이스 : 추가 검토 후 ... 여기에이 작품을 (! 그것은 나를 위해 재미있는 운동이었다) 제작으로 관련 일부 클래스 등이다. 슬라이드 방향 (슬라이드 업 또는 다운 애니메이션 선택)을 결정하기 위해 이전의 "시야 (top of view)"위치를 추적해야합니다.

위에 나열된 애니메이션은 실제로 원하는 것이 아닙니다. android.widget.TextSwitcher 클래스와 push*.xml 파일을 SDK/android-X/data/res/anim 디렉토리에있는 것이 더 좋습니다.

섹션 뷰를 목록에 삽입하려면 고유 한 어댑터 하위 클래스가 있어야합니다. getView(...)은 행이 섹션 머리글인지 여부에 관계없이 행 뷰의 속성 (bkgnd, 텍스트 스타일 등)을 다르게 설정할 수 있습니다. TextSwitcher 뷰 팩토리에서이 코드를 다시 사용하여 정적 TextView/Switcher를 목록 위에 채 웁니다.

재미 있습니다 ...!

+0

타이와 +1로 애니메이션 팁을 살펴볼 것입니다. –

2

앞서 언급했듯이 ListView가 필요합니다.Android 4의 People 앱과 비슷한 효과를 내기 위해이 우수한 library (무료 및 오픈 소스)을 사용했습니다.

관련 문제