일부소스
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)
{
tv_first = (TextView)findViewById(R.id.tv_first);
tv_visible = (TextView)findViewById(R.id.tv_visible);
tv_total = (TextView)findViewById(R.id.tv_total);
tv_first.setText("firstVisibleItem = " + firstVisibleItem);
tv_visible.setText("visibleItemCount = " + visibleItemCount);
tv_total.setText("totalItemCount = " + totalItemCount);
}
동작
참고설명
레이아웃은(TextView 3개, ListView 하나로 구성되있다)
동작화면에서는 ListView에 0~29까지 30개의 Item을 삽입했다
firstVisibleItem : 화면에 보이는 ListView에서 가장 위에 보이는 Item
-> 스크롤을 내릴때마다 firstVisibleItem이 바뀌는 것을 확인
visibleItemCount : 화면에 보이는 Item갯수
-> 화면에서는 최소 9개 ~ 최대 10개의 Item이 보인다
-> 0~8(9), 0~9(10), 1~9(9), 1~10(10)
totalItemCount : ListView에 있는 전체 Item 갯수
-> 0~29까지 data를 넣었으므로 총 30개로 변함이 없다
응용:
if(firstVisibleItem==0), if(firstVisibleItem==list.size()-15) 등등
다양한 조건을 걸어서
insert();를 통해서 data를 무한으로 추가도 가능하고
Item이 무한으로 생성되는 과정에서
totalItemCount에서 특정 갯수에 도달했을때도
조건을 넣는등 다양한 활용 가능
한가지더 알아두자면 Log로 찍어보면 알겠지만 만약 예를들어
if(firstVisibleItem==5)
{
i++; //i는 int
}
라고 가정했을때, 스크롤을 내리는 과정에서 화면 맨위에 Item5가 도달했을때
if문에 딱 한번 들어와서 i를 1로 증가시키고 빠지는것이 아니라
화면에 터치를 한시점에서 스크롤이 생성되서 ~ 터치를 땐 순간까지
조건에 만족하면 if문에 계속 들어오게 된다,
스크롤을 내리다가 5에서 한 3초간 머물러있으면 if문에 수십번 들어온다.
한번 테스트 해보는게 이해하는것이 빠를 것이다.
일부소스
@Override
public void onScrollStateChanged(AbsListView view, int scrollState)
{
tv_idle = (TextView)findViewById(R.id.tv_idle);
tv_touch_scroll = (TextView)findViewById(R.id.tv_touch_scroll);
tv_fling = (TextView)findViewById(R.id.tv_fling);
switch (scrollState)
{
case SCROLL_STATE_IDLE:
tv_idle.setBackgroundColor(Color.GREEN);
tv_touch_scroll.setBackgroundColor(Color.WHITE);
tv_fling.setBackgroundColor(Color.WHITE);
break;
case SCROLL_STATE_TOUCH_SCROLL:
tv_touch_scroll.setBackgroundColor(Color.GREEN);
tv_idle.setBackgroundColor(Color.WHITE);
tv_fling.setBackgroundColor(Color.WHITE);
break;
case SCROLL_STATE_FLING:
tv_fling.setBackgroundColor(Color.GREEN);
tv_idle.setBackgroundColor(Color.WHITE);
tv_touch_scroll.setBackgroundColor(Color.WHITE);
break;
}
}
동작
참고설명
레이아웃은(TextView 3개, ListView 하나로 구성되있다)
scrollState는 총 3가지가 있다.
동작화면 오른쪽 스크롤이 살짝 짤렸지만 잘 보면
SCROLL_STATE_IDLE : 스크롤이 종료되는 시점이다.(손가락 터치중X)
-> 오른쪽 스크롤이 움직이다가 멈추는 시점이라고 보면 된다.
SCROLL_STATE_TOUCH_SCROLL : 스크롤이 진행되는 시점(손가락 터치중O)
-> 오른쪽 스크롤막대가 생기는 시점이라고 생각하면 된다.
SCROLL_STATE_FLING : 손가락 터치를 끝냇는데도 스크롤이 남을때(손가락 터치중X)
-> 한번에 쏵 크게 내리거나 올렸을때 터치가 끝난후 스크롤막대가 움직일때이다.
응용하는 방법은 워낙 다양하다
IDLE 상태에서 조건을 줘서 특정 position이면 data를 추가시켜도 되고
TOUCH_SCROLL상태에서만 애니메이션을 추가시켜도 되고
활용하기 나름이다.