`
刘公子家的煮妇
  • 浏览: 15021 次
社区版块
存档分类
最新评论

带Tab的viewpager可循环滑动

阅读更多

不是真正意义上实现的无限循环,只是设置一个最大值,但是想到用户一般也不可能真正滑到无限大值去,所以这种伪循环也是可以满足需求的。

 

实现的核心是利用两个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

0
5
分享到:
评论

相关推荐

    ViewPager无限循环左右滑动效果

    通过运行这个示例应用,我们可以验证无限循环滑动是否正常工作。 在`ViewPagerDemo`项目中,应该包含了以下关键部分: 1. 自定义的`InfinitePagerAdapter`类。 2. 主Activity,负责初始化和设置ViewPager以及其...

    Android ViewPager实现左右循环滑动及轮播效果

    在标题“Android ViewPager实现左右循环滑动及轮播效果”中,提到的关键技术点是使ViewPager具备循环滑动和轮播功能。下面我们将深入探讨如何实现这些效果。 1. **ViewPager基础**: ViewPager最初是Android ...

    android viewpager左右无限滑动

    "android viewpager 左右无限滑动"这一主题,意味着我们要创建一个可以无限制地向左或向右滑动的ViewPager实现,即用户在滑动到最后一页时,可以继续滑动到页面的起始位置,形成一种循环的效果。下面将详细介绍如何...

    android 自定义viewpager实现循环滑动,非使用Integer.MAX_VALUES

    在Android开发中,ViewPager是一个非常常用的组件,它用于展示可滑动的页面,通常用于实现类似轮播图或Tab切换的效果。然而,原生的ViewPager并不支持无限循环滑动,即当滑动到首尾时不能自动跳转到另一端。`Integer...

    ViewPager 自动循环,定时滑动

    在Android开发中,ViewPager是一个非常常用的组件,它用于展示可滑动的页面,通常用于实现类似轮播图或Tab切换的效果。在这个特定的场景中,我们讨论的是如何使ViewPager实现自动循环和定时滑动的功能。这通常是通过...

    viewpager无限循环

    在Android开发中,`ViewPager` 是一个非常常用的组件,它允许用户通过左右滑动来浏览多个页面,通常用于实现Tab切换、图片轮播等场景。本项目标题为 "viewpager无限循环",意味着我们将探讨如何使`ViewPager`在达到...

    Viewpager左右循环滚动

    总结,"Viewpager左右循环滚动"是一个Android开发中的高级技巧,涉及到对ViewPager的深入理解和自定义,通过这样的实现,我们可以创建出更加丰富的用户体验,让用户在浏览内容时享受到流畅的循环滑动效果。

    实现ViewPager的左右循环滑动

    在Android开发中,ViewPager是一个非常常用的组件,它用于展示可滑动的页面,通常用于实现类似轮播图或Tab切换的效果。然而,ViewPager默认并不支持左右循环滑动,即当滑动到首尾页时无法无缝地跳转回对端。针对这个...

    ViewPager 的多个使用场景的Demo 欢迎页 循环 tab内嵌套

    3. **Tab内嵌套ViewPager**:在`TabViewPager嵌套ViewPage.zip`里,示例可能展示了如何在一个TabLayout中嵌套多个ViewPager,实现每个Tab都有独立的页面滑动效果。这种情况下,通常会使用`TabLayout`与`ViewPager`的...

    Android例子源码ViewPager手动滑动和自动滑动无限循环滑动加载.zip

    这个"Android例子源码ViewPager手动滑动和自动滑动无限循环滑动加载.zip"的压缩包提供了一个具体的实现示例,帮助开发者理解和学习如何在ViewPager中实现手动滑动、自动滑动以及无限循环滑动加载的功能。 首先,...

    循环滑动的ViewPager

    ViewPager是Android平台上一个非常常用的控件,主要用于展示可滑动的页面集合,常用于实现Tab切换或者图片轮播等效果。然而,标准的ViewPager在滑动到最后一项或第一项时,不能再继续滑动,这在某些场景下,如创建...

    自定义ViewPager实现自动循环手动滑动翻页

    在Android开发中,ViewPager是一个非常常用的组件,常用于展示可滑动的页面,如应用的Tab切换、图片轮播等。本教程将详细介绍如何通过自定义ViewPager实现自动循环与手动滑动翻页的功能,适用于广告图轮播或其他需要...

    ViewPager左右无限滑动

    然而,原生的ViewPager并不支持无限循环滑动,即当你滑动到最后一个页面时无法直接跳转到第一个页面,反之亦然。为了实现这种效果,开发者们通常会采用LoopViewPager这样的自定义组件。 `LoopViewPager`是通过对...

    使用ViewPager实现左右滑动翻页.zip

    此外,对于更复杂的用例,比如无限循环滑动,可以通过重写`PagerAdapter`的方法并实现特定逻辑来实现。同时,还可以监听`ViewPager`的滑动事件,以便在滑动时执行其他操作。 总之,ViewPager是Android开发中不可或...

    Android ViewPager实现无限循环

    在Android开发中,ViewPager是一个非常常用的组件,它允许用户通过左右滑动来浏览多个页面,通常用于实现Tab切换或者图片轮播等效果。当我们想要在ViewPager中实现无限循环的效果时,意味着用户无论向左滑动还是向右...

    viewpager左右循环导航控制跳转

    在Android开发中,ViewPager是一个非常常用的组件,它用于展示可滑动的页面集合,通常用于实现类似轮播图或者Tab切换的效果。在这个项目中,我们关注的是如何将ViewPager实现为一个左右循环的导航控制,同时允许用户...

    ViewPager无限循环滑动加载

    在Android开发中,ViewPager是一个非常常用的组件,它用于展示可滑动的页面,常用于实现类似轮播图、Tab切换等效果。标题“ViewPager无限循环滑动加载”指的是要实现一个功能,使得用户在滑动ViewPager时,从第一个...

    ViewPager无线自动循环

    在Android开发中,ViewPager是一个非常常用的组件,它用于展示可滑动的页面,常用于实现类似轮播图、Tab切换等效果。当我们需要在ViewPager中实现“无线自动循环”时,意味着用户在滑动到最后一张页面后可以无缝地...

Global site tag (gtag.js) - Google Analytics