上一篇 A NiceViewPager(上) 中存在的問題就是首尾兩頁跳轉(zhuǎn)的時候由于沒有平滑過渡朗徊,會覺得很突兀,這次使用在ViewPager中設(shè)置count個數(shù)為Integer.MAX_VALUE,在instantiateItem中對position取余來實現(xiàn)無限循環(huán),初始化的時候讓其顯示在count的中間,那樣用戶想要劃到邊界應(yīng)該很是困難了恨憎,這樣也解決了過度突兀的問題,看下效果圖吧郊楣,如果對滑動特效還不熟悉的話那就到上一篇中去看看吧憔恳。
下面給出相關(guān)修改代碼:
// 使其顯示在中間
vp.setCurrentItem(len * ((Integer.MAX_VALUE >> 1) / len));
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
Log.d("cmj", "pos: " + position);
position %= len;
View view = mViews.get(position);
// 不加這個的話會由于緩存造成帶有ViewGroup的view新增到container中報錯
ViewParent parent = view.getParent();
if (parent != null) {
ViewGroup vg = (ViewGroup) parent;
vg.removeView(view);
}
container.addView(view);
return view;
}
這次新加了下標(biāo)滾動指示器,其相關(guān)代碼也很簡單净蚤,如下:
// 指示器
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(dp2px(this, 16), dp2px(this, 16));
params.rightMargin = dp2px(this, 16);
for (int i = 0; i < len; i++) {
ImageView imageViewDot = new ImageView(this);
imageViewDot.setLayoutParams(params);
// 設(shè)置小圓點的背景為暗紅圖片
imageViewDot.setBackgroundResource(R.drawable.red_dot_night);
ll.addView(imageViewDot);
mDotViews.add(imageViewDot);
}
mDotViews.get(prePos).setBackgroundResource(R.drawable.red_dot);
@Override
public void onPageSelected(int position) {
Log.d("cmj", "onPageSelectedPos: " + position);
mDotViews.get(prePos).setBackgroundResource(R.drawable.red_dot_night);
prePos = position % len;
mDotViews.get(prePos).setBackgroundResource(R.drawable.red_dot);
}
源碼已上傳github钥组,獻出鏈接NiceViewPager,喜歡記得star哦今瀑。滴程梦,下車卡~