A NiceViewPager(下)

上一篇 A NiceViewPager(上) 中存在的问题就是首尾两页跳转的时候由于没有平滑过渡,会觉得很突兀,这次使用在ViewPager中设置count个数为Integer.MAX_VALUE,在instantiateItem中对position取余来实现无限循环,初始化的时候让其显示在count的中间,那样用户想要划到边界应该很是困难了,这样也解决了过度突兀的问题,看下效果图吧,如果对滑动特效还不熟悉的话那就到上一篇中去看看吧。

NiceViewPagerV2

下面给出相关修改代码:

// 使其显示在中间
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;
}

这次新加了下标滚动指示器,其相关代码也很简单,如下:

// 指示器
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);
    //  设置小圆点的背景为暗红图片
    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哦。滴,下车卡~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,506评论 25 709
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,358评论 0 33
  • 5:30起床 6:10运动 7:00-7:45早餐 7:50-8:30送上学,买菜 8:30-9:28晾衣,发圈 ...
    小Yan子生活点滴阅读 1,729评论 0 0
  • 我们应该感谢上天,在有生之年,在还没有老的走不动的时候,还能再见到彼此,还有机会拥有这样的感情,我们必须小心的呵护...
    bushabush阅读 1,616评论 0 0
  • 现在的我,想起这句话是18:28分。我不知为何会突然想起这句话来,要说是对这段文字有些想表达的事儿吧。 ...
    夏六笙阅读 5,283评论 0 0

友情链接更多精彩内容