不是真正意义上实现的无限循环,只是设置一个最大值,但是想到用户一般也不可能真正滑到无限大值去,所以这种伪循环也是可以满足需求的。
实现的核心是利用两个viewpager,一个做tab,一个做content。设置一个最大可滑动数,比如1000,这个值不能太大,否则会OOM,内部机制应该是会首先根据你getcount的数初始化一个子项为null的数组。在初始化viewpager的时候选中最中间的项500,再将这个 position转化成实际数据中的position返回View.
对于tab和content中的初始化位置,也有要求,若content中定到的是500的position,那tab中应该是499的位置,这样让tab 中500的位置定位到tab的中间。
1、初始化contentViewpager
private void initContentViewPager() { PagerAdapter galleryAdapter = new PagerAdapter( getSupportFragmentManager()); pager.setAdapter(galleryAdapter); pager.setPageMargin(20); pager.setOffscreenPageLimit(2); pager.setCurrentItem(MIDCOUNT, false); pager.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageSelected(int arg0) { tab.setCurrentItem(arg0 - 1, true); } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { // TODO Auto-generated method stub } @Override public void onPageScrollStateChanged(int arg0) { // TODO Auto-generated method stub } }); }
2、content 中adapter对位置的逻辑处理,当content中Viewpager的位置为500时,应该返回数据中的0位置。
private class PagerAdapter extends FragmentStatePagerAdapter { public PagerAdapter(FragmentManager fm) { super(fm); } @Override public int getCount() { return LOOPCOUNT; } @Override public Fragment getItem(int position) { int s = 0; if (position < MIDCOUNT) { s = strs.length - (Math.abs(position - MIDCOUNT) % strs.length); } else { s = position - MIDCOUNT; } int pos = s % strs.length; ContentFragment fragment = ContentFragment.newInstance(strs[pos]); return fragment; } }
3、初始始化Tab
private void initTabViewPager() { TitleAdapter titleAdapter = new TitleAdapter( getSupportFragmentManager()); tab.setAdapter(titleAdapter); tab.setPageMargin((int) (getDisplayWidth() * TABITEMMARGIN)); tab.setOffscreenPageLimit(2); tab.setCurrentItem(MIDCOUNT - 1, false); titleAdapter.setOnPageClickListener(new OnPageClickListener() { @Override public void onPageClick(int arg0) { tab.setCurrentItem(arg0 - 1); } }); tab.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageSelected(int arg0) { pager.setCurrentItem(arg0 + 1, true); } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { // TODO Auto-generated method stub } @Override public void onPageScrollStateChanged(int arg0) { // TODO Auto-generated method stub } }); }
完整demo地址:https://github.com/hyhe/viewpager-tabbar--infinite-scroll-.git
相关推荐
通过运行这个示例应用,我们可以验证无限循环滑动是否正常工作。 在`ViewPagerDemo`项目中,应该包含了以下关键部分: 1. 自定义的`InfinitePagerAdapter`类。 2. 主Activity,负责初始化和设置ViewPager以及其...
在标题“Android ViewPager实现左右循环滑动及轮播效果”中,提到的关键技术点是使ViewPager具备循环滑动和轮播功能。下面我们将深入探讨如何实现这些效果。 1. **ViewPager基础**: ViewPager最初是Android ...
"android viewpager 左右无限滑动"这一主题,意味着我们要创建一个可以无限制地向左或向右滑动的ViewPager实现,即用户在滑动到最后一页时,可以继续滑动到页面的起始位置,形成一种循环的效果。下面将详细介绍如何...
在Android开发中,ViewPager是一个非常常用的组件,它用于展示可滑动的页面,通常用于实现类似轮播图或Tab切换的效果。然而,原生的ViewPager并不支持无限循环滑动,即当滑动到首尾时不能自动跳转到另一端。`Integer...
在Android开发中,ViewPager是一个非常常用的组件,它用于展示可滑动的页面,通常用于实现类似轮播图或Tab切换的效果。在这个特定的场景中,我们讨论的是如何使ViewPager实现自动循环和定时滑动的功能。这通常是通过...
在Android开发中,`ViewPager` 是一个非常常用的组件,它允许用户通过左右滑动来浏览多个页面,通常用于实现Tab切换、图片轮播等场景。本项目标题为 "viewpager无限循环",意味着我们将探讨如何使`ViewPager`在达到...
总结,"Viewpager左右循环滚动"是一个Android开发中的高级技巧,涉及到对ViewPager的深入理解和自定义,通过这样的实现,我们可以创建出更加丰富的用户体验,让用户在浏览内容时享受到流畅的循环滑动效果。
在Android开发中,ViewPager是一个非常常用的组件,它用于展示可滑动的页面,通常用于实现类似轮播图或Tab切换的效果。然而,ViewPager默认并不支持左右循环滑动,即当滑动到首尾页时无法无缝地跳转回对端。针对这个...
3. **Tab内嵌套ViewPager**:在`TabViewPager嵌套ViewPage.zip`里,示例可能展示了如何在一个TabLayout中嵌套多个ViewPager,实现每个Tab都有独立的页面滑动效果。这种情况下,通常会使用`TabLayout`与`ViewPager`的...
这个"Android例子源码ViewPager手动滑动和自动滑动无限循环滑动加载.zip"的压缩包提供了一个具体的实现示例,帮助开发者理解和学习如何在ViewPager中实现手动滑动、自动滑动以及无限循环滑动加载的功能。 首先,...
ViewPager是Android平台上一个非常常用的控件,主要用于展示可滑动的页面集合,常用于实现Tab切换或者图片轮播等效果。然而,标准的ViewPager在滑动到最后一项或第一项时,不能再继续滑动,这在某些场景下,如创建...
在Android开发中,ViewPager是一个非常常用的组件,常用于展示可滑动的页面,如应用的Tab切换、图片轮播等。本教程将详细介绍如何通过自定义ViewPager实现自动循环与手动滑动翻页的功能,适用于广告图轮播或其他需要...
然而,原生的ViewPager并不支持无限循环滑动,即当你滑动到最后一个页面时无法直接跳转到第一个页面,反之亦然。为了实现这种效果,开发者们通常会采用LoopViewPager这样的自定义组件。 `LoopViewPager`是通过对...
此外,对于更复杂的用例,比如无限循环滑动,可以通过重写`PagerAdapter`的方法并实现特定逻辑来实现。同时,还可以监听`ViewPager`的滑动事件,以便在滑动时执行其他操作。 总之,ViewPager是Android开发中不可或...
在Android开发中,ViewPager是一个非常常用的组件,它允许用户通过左右滑动来浏览多个页面,通常用于实现Tab切换或者图片轮播等效果。当我们想要在ViewPager中实现无限循环的效果时,意味着用户无论向左滑动还是向右...
在Android开发中,ViewPager是一个非常常用的组件,它用于展示可滑动的页面集合,通常用于实现类似轮播图或者Tab切换的效果。在这个项目中,我们关注的是如何将ViewPager实现为一个左右循环的导航控制,同时允许用户...
在Android开发中,ViewPager是一个非常常用的组件,它用于展示可滑动的页面,常用于实现类似轮播图、Tab切换等效果。标题“ViewPager无限循环滑动加载”指的是要实现一个功能,使得用户在滑动ViewPager时,从第一个...
在Android开发中,ViewPager是一个非常常用的组件,它用于展示可滑动的页面,常用于实现类似轮播图、Tab切换等效果。当我们需要在ViewPager中实现“无线自动循环”时,意味着用户在滑动到最后一张页面后可以无缝地...