오픈 소스 라 이브 러 리 배 너 는 어떻게 무한 윤 방 을 실현 합 니까?
class BannerPagerAdapter extends PagerAdapter {
List list;
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public Object instantiateItem(ViewGroup container, final int position) {
int realPosition = position%list.size();
return list.get(realPosition);
}
}
오픈 소스 라 이브 러 리 배 너 를 사용 한 후,이 라 이브 러 리 는 무한 라운드 방송 을 처리 하여 매우 잘 쓴 것 같다.
이 라 이브 러 리 는 좌우 무한 으로 미 끄 러 질 수도 있 고,자동 으로 좌우 무한 윤방 할 수도 있다.
우선 그 대체적인 원 리 를 알 아 보 자.
데이터 의 앞 뒤 양쪽 끝 에 각각 데 이 터 를 추가 합 니 다.전단 에 추 가 된 것 은 마지막 날 데이터 이 고 끝 에 추 가 된 것 은 첫 번 째 데이터 입 니 다.그림 참조:
C 에서 D 로 미 끄 러 졌 을 때 ViewPager.OnPageChange Listener\#onPageScroll State Changed()에서 감청 을 하고 A 로 빠르게 전환 합 니 다.A 에서 E 로 미 끄 러 졌 을 때 ViewPager.OnPage Change Listener\#onPage Scroll State Changed()에서 감청 을 하고 C 로 빠르게 전환 합 니 다.viewPager.setCurrentItem(int,boolean)을 사용 하도록 전환 합 니 다.두 번 째 매개 변 수 는 false 로 애니메이션 을 사용 하지 않 고 직접 빠르게 전환 하여 무한 윤방 의 가상 을 만 드 는 것 을 나타 낸다.
그리고 ViewPager.OnPageChange Listener 에서 감청 처 리 를 하고 빠르게 전환 합 니 다.
//
int currentIndex = 1;
//
int pageCount;
private ViewPager.OnPageChangeListener onPageChangeListener = new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
currentIndex = position;
}
@Override
public void onPageScrollStateChanged(int state) {
// , ,
if (currentIndex==0){
viewPager.setCurrentItem(pageCount,false);
}
// ,
if (currentIndex==pageCount+1){
viewPager.setCurrentItem(1,false);
}
}
};