viewpager无限循环与ViewPagerIndicator

关于android的轮播。由于使用到了ViewPagerIndicator这个开源控件

发现ViewPagerIndicator是根据ViewPager中数据的数量来生成,所以如果需要一个可以无限循环的ViewPagerIndicator

那么就会出现错误。首先程序会崩溃,然而,即使不崩溃。也不是我们想要的效果。因为我们根本不需要那么多的点,

我们只需要在几张图片之间切换。

这个时候我去网路上找相应的解决方法。其中一种是放弃ViewPagerIndicator,自己使用imageview动态生成指示的圆点。

但是我实在是觉得ViewPagerIndicator很棒。效果好看。而且可以使用条形,圆形等各种形状。用起来十分的方便啊。(不知道是哪位大神的杰作)

所以不舍得放弃。之后就是网上找到了和可以完美兼容ViewPagerIndicator的方法。但是蔽人真的是才疏学浅,并没有看的十分明白(-_-|||)

于是自己想办法。想到了一个比较笨拙的解决的方式,顺着自己的思路解决掉了。

在这里。首先看了ViewPagerIndicator的CirclePageIndicator的源代码的ondraw方法中看到

        final int count = mViewPager.getAdapter().getCount();
        if (count == 0) {
            return;
        }


这段代码,这里发现ViewPagerIndicator生成圆点数量是依据关联的ViewPager的适配器的getCount()方法返回的int值。

所以首先要让这个值的数量是真实的数据数量。然后还有一个问题,ViewPagerIndicator会根据CurrentItem来显示当前被选择的点

如果不做任何处理,那么翻到最后一页。势必会崩溃,而不是回到第一页。然后又不能如刚才按照之前的思路,在适配器中改变让返回的值不同,

因为要实现循环翻页的话,一定要让CurrentItem的值增加,让CurrentItem的最大长度等于一个尽可能大的数Integer.MAX。

所以我这里做了个简单的改动

        if (mViewPager == null) {
            return;
        }
        final int count = mViewPager.getAdapter().getCount();
        if (count == 0) {
            return;
        }
        mCurrentPage%=count;
        if (mCurrentPage >= count) {
            setCurrentItem(count - 1);
            return;
        }


这里增加一句mCurrentPage%=count ;和viewpager循环翻页的时候防止越界是一个思路。就这样简单处理了一下

然后说一下PagerAdapter和ViewPager中的改动,这里的方式就比较笨拙了。

这里在ViewPager的子类中覆盖了getAdapter方法

	@Override
	public PagerAdapter getAdapter() {
		// TODO Auto-generated method stub
		return ((ImagePagerAdapter) super.getAdapter()).getCopyAdapter();
	}


在PagerAdapter的子类中增加一个PagerAdapter类型的变量copy,提供返回这个变量的方法,getCopyAdapter();

	private PagerAdapter copy = new PagerAdapter() {

		@Override
		public boolean isViewFromObject(View arg0, Object arg1) {
			// TODO Auto-generated method stub
			return false;
		}

		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return views.size();
		}
		public int getItemPosition(Object object) {
			return pos;
		};
	};
	public PagerAdapter getCopyAdapter(){
		return copy;
	}


在变量copy的getCount()方法中返回真实的图片数据的数量。

自己觉得这个方法笨拙直观。多次测试没有问题。觉得还是可行的。^_^


PS:这里由于做的图片轮播。使用的是ViewPagerIndicator的CirclePageIndicator,CirclePageIndicator有个滑动过程中小圆点平移的效果。

这样用于轮播的时候。滑动到最后的时候出现平移动画不太美观。这里在源代码里做了简单的修改


      if (!mSnap&&!(mCurrentPage==count-1)) {
            cx += mPageOffset * threeRadius;
        }
这个是绘制的时候的偏移的长度,在判断的时候增加mCurrentPage==count-1;这样当最后一页滑动到第一页的过程中,圆点就始终停留在最后一个点。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ViewPagerIndicator是一个Android库,用于在ViewPager中添加指示器,以帮助用户了解当前页面的位置。它提供了多种指示器样式和自定义选项,可以轻松地与ViewPager集成。它是由Jake Wharton开发的,是一个广泛使用的库。 ### 回答2: ViewPagerIndicator是一个Android库,用于在ViewPager上添加标签指示器。它提供了一种简单而强大的方法来管理ViewPager的标签指示器,帮助用户在不同页面之间进行导航。该库是由Jake Wharton开发的,他是一位著名的Android程序员,也是Square公司的工程师。 使用ViewPagerIndicator可以为ViewPager添加多种类型的标签指示器,如圆形指示器、文字指示器、图片指示器等。你可以根据自己的需求选择合适的标签指示器样式,并自定义其外观和行为。该库支持水平和垂直方向的滑动,并兼容较旧的Android版本。 ViewPagerIndicator的使用非常简单,首先需要在项目中引入该库的依赖。然后,在布局文件中添加ViewPager和指示器,通过ViewPagerIndicator提供的适配器类将ViewPager和指示器绑定在一起。最后,你可以根据需要自定义指示器的样式、颜色等属性。 ViewPagerIndicator不仅提供了标签指示器,还包含其他一些有用的功能。例如,你可以通过ViewPagerIndicator轻松实现ViewPager的循环滚动,使第一页和最后一页之间实现无缝连接。此外,该库还支持自定义动画效果和触摸事件处理。 总之,ViewPagerIndicator是一个强大而灵活的Android库,为ViewPager添加标签指示器提供了便利。它可以帮助你更好地管理ViewPager的页面导航,并提供了丰富的自定义选项。无论是初学者还是有经验的Android开发者,都可以轻松地使用ViewPagerIndicator来改善用户界面的体验。 ### 回答3: ViewPagerIndicator是一个开源的视图指示器库,用于辅助在Android应用中实现ViewPager的指示器功能。它与ViewPager控件配合使用,为用户提供了一种方便的方式来切换页面,并显示当前页面的指示器。 ViewPagerIndicator的主要特点是简单易用和高度可定制。它提供了多种指示器样式,包括圆形、线性、文字等等,用户可以根据自己的需求选择合适的样式。同时,它还支持自定义指示器的颜色、大小、边距等属性,使用户可以完全控制指示器的外观。 除了基本的指示器功能之外,ViewPagerIndicator还提供了一些附加功能,如循环滚动、标题栏指示器等。循环滚动功能可以让用户在最后一个页面滑动时自动跳转到第一个页面,实现无限循环。标题栏指示器可以将指示器放置在标题栏上,使得用户可以在顶部直接切换页面,提升用户体验。 ViewPagerIndicator的使用也非常简单,只需要在项目中添加相应的依赖库,并在布局文件中配置指示器,然后在代码中设置ViewPager与指示器的关联即可。对于初学者来说,它是一个很好的学习资料,帮助他们快速地了解和使用ViewPager以及指示器的相关知识。 总而言之,ViewPagerIndicator是一个功能强大、简单易用的ViewPager指示器库,为开发者提供了丰富的样式和属性选择,帮助他们快速实现ViewPager的指示器功能,提升应用的用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值