viewpager实现无限循环滚动幻灯片
2015-01-08 20:31
561 查看
一直想做循环滑动幻灯片的效果,类似pptv等的首页效果十分抱歉,不会整gif动图~~~
废话少说,先上图看效果:
思路是:设置pageradapter的count为Integer.MAX_VALUE,但实际的item只有几个,用取余的方式取item,在设置adapter时同时设置currentItem为实际item数的N倍(足够大就好)。这样就可以左右无缝循环滑动!(毕竟你不可能滑上亿次),并且不用担心内存问题,就那几个玩意~~~
这里不能用FragmentPagerAdapter或FragmentStatePagerAdapter,因为这两个的item是fragment,他们有自己的fragment管理机制,要是用,getFragment()返回同一个fragment(指针一样)就会报错,不信就试试~~~
要继承PagerAdapter,使用view作为item,重写必要的方法。。。
图上右下角的指示器并不是我做的,但我稍微修改了一下,使他使用于我的“无限循环方式”。
废话太多了,上部分源码:
这是adapter的:
唉,表达能力有待提高,直接下工程文件看看吧!
点击下载!!!
废话少说,先上图看效果:
思路是:设置pageradapter的count为Integer.MAX_VALUE,但实际的item只有几个,用取余的方式取item,在设置adapter时同时设置currentItem为实际item数的N倍(足够大就好)。这样就可以左右无缝循环滑动!(毕竟你不可能滑上亿次),并且不用担心内存问题,就那几个玩意~~~
这里不能用FragmentPagerAdapter或FragmentStatePagerAdapter,因为这两个的item是fragment,他们有自己的fragment管理机制,要是用,getFragment()返回同一个fragment(指针一样)就会报错,不信就试试~~~
要继承PagerAdapter,使用view作为item,重写必要的方法。。。
图上右下角的指示器并不是我做的,但我稍微修改了一下,使他使用于我的“无限循环方式”。
废话太多了,上部分源码:
这是adapter的:
/** * 自定义视图幻灯片 适配器 * 无限循环 * @author hezb */ public class CustomViewPagerAdapter extends PagerAdapter{ private final String TAG = "hezb"; private int realCount = 0; private ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); private List<View> viewList; /** * 传入 自定义 view 的列表 */ public CustomViewPagerAdapter(List<View> viewList) { if (viewList == null) { Log.e(TAG, "CustomViewPagerAdapter viewList is null!"); return; } realCount = viewList.size(); this.viewList = viewList; for (int i = 0; i < viewList.size(); i++) { viewList.get(i).setLayoutParams(lp); } } @Override public int getCount() { return realCount == 0 ? 0 : Integer.MAX_VALUE; } /** * @return 实际的 item 数 */ public int getRealCount(){ return realCount; } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } @Override public Object instantiateItem(View container, int position) { position = position % realCount; try { ((ViewPager) container).addView(viewList.get(position)); } catch (Exception e) { Log.e(TAG, e.getMessage()); } return viewList.get(position); } @Override public Object instantiateItem(ViewGroup container, int position) { position = position % realCount; try { ((ViewPager) container).addView(viewList.get(position)); } catch (Exception e) { Log.e(TAG, e.getMessage()); } return viewList.get(position); } @Override public void destroyItem(View container, int position, Object object) { ((ViewGroup) container).removeView((View) object); } @Override public void destroyItem(ViewGroup container, int position, Object object) { ((ViewGroup) container).removeView((View) object); } }
唉,表达能力有待提高,直接下工程文件看看吧!
点击下载!!!
相关文章推荐
- 【Android】ViewPager实现无限循环滚动
- android viewpager实现无限循环自动滚动
- Android ViewPager的无限循环与自动滚动实现
- Android ViewPager实现无限循环滑动
- Android ViewPager 实现无限循环滑动
- ViewPager实现无限循环
- Viewpager水平循环滚动的一种实现
- 利用ViewPager实现图片循环滚动
- Android viewpager中动态添加view并实现伪无限循环的方法
- 用最简单最实用的方式实现ViewPager无限循环两种方式
- android 自定义Viewpager实现无限循环
- android 实现无限循环viewpager
- 利用ViewPager和CirclePageIndicator实现新闻循环滚动
- Android ViewPager实现无限循环效果
- 利用ViewPager实现图片循环滚动
- 使用ViewPager实现自动无限循环的轮播
- ViewPager实现无限循环切换和手势滑动效果
- 使用ViewPager实现循环滚动播放图片广告
- 利用ViewPager实现图片循环滚动
- Android ViewPager巧用偷梁换柱实现自动循环滚动