安卓ViewPager无限循环
来源:互联网 发布:唯女子与小人难养 知乎 编辑:程序博客网 时间:2024/04/30 09:44
viewpager的无限循环原理就是当滚到最后一条时预加载下一条,这个下一条设置成第一条即可,实现无限循环。
简易图,第三张回到第一张的,向右滑动,显示的是第五个page,松手跳到第二个page
adapter:
package com.example.flowtest.BannerPager;import java.util.List;import android.os.Handler;import android.os.Message;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.view.View;import android.view.ViewGroup;public class BannerPagerAdapter extends PagerAdapter implements OnPageChangeListener { private List<BannerPagerItem> listViews; private ViewPager myPager; private boolean isLoop; private BannerPagerAdapterCallback callback; private boolean isTouch; private int time; private long timeNow; public BannerPagerAdapter(List<BannerPagerItem> listViews, List<BannerPagerBean> listBeans, ViewPager myPager, boolean isLoop, int time, BannerPagerAdapterCallback callback) { this.listViews = listViews; this.myPager = myPager; this.isLoop = isLoop; this.callback = callback; this.time = time; if (isLoop) { Message msg = new Message(); handler.sendMessageDelayed(msg, time); timeNow = System.currentTimeMillis(); } } @Override public int getCount() { return listViews.size(); } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == (arg1); } @Override public Object instantiateItem(View arg0, int position) { BannerPagerItem view = listViews.get(position); ViewGroup parent = (ViewGroup) view.getParent(); if (parent != null) { parent.removeView(view); } ((ViewPager) arg0).addView(view); return view; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(listViews.get(position)); } @Override public void onPageScrollStateChanged(int arg0) { } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageSelected(int position) { if (listViews.size() > 1) { if (position < 1) { position = listViews.size() - 2; myPager.setCurrentItem(position, false); } else if (position > listViews.size() - 2) { myPager.setCurrentItem(1, false); position = 1; } } if (isLoop) { Message msg = new Message(); handler.sendMessageDelayed(msg, time); timeNow = System.currentTimeMillis(); } callback.onPageSelected(position); } public void setTouch(boolean isTouch) { this.isTouch = isTouch; } private Handler handler = new Handler() { public void handleMessage(Message msg) { long t = System.currentTimeMillis() - timeNow; if (t >= time) { int index = myPager.getCurrentItem(); myPager.setCurrentItem(index + 1); } }; }; public interface BannerPagerAdapterCallback { public void onPageSelected(int position); }}
写了一个自定义控件
/** * 初始化控件, 必须实现的方法 * * @param activity * 获取activity * @param listBeans * 设置需要显示的数据 * @param isLoop * 是否自动轮播 * @param time * 自动轮播时间,(isLoop==false是无效) * @param adapterCallBack * 切换时调用(pager下面的原点) * @param adapterCallBack * pager点击事件 * **/ public void initPager(Activity activity, List<BannerPagerBean> listBeans, boolean isLoop, int time, BannerPagerAdapterCallback adapterCallBack, BannerPagerViewCallBack viewCallBack) { this.activity = activity; this.listBeans = listBeans; this.callBack = viewCallBack; this.isLoop = isLoop; this.time = time; this.adapterCallBack = adapterCallBack; init(); }
demo在下面,可以直接使用
http://download.csdn.net/detail/b805887485/9593905
0 0
- 安卓ViewPager无限循环
- 安卓ViewPager无限滑动
- 【安卓-自定义布局】安卓App开发思路 一步一个脚印(七)实现ViewPager无限循环与自动播放
- viewpager无限循环
- 无限循环的ViewPager
- viewpager无限循环
- ViewPager无限循环
- ViewPager无限循环
- Android无限循环ViewPager
- ViewPager无限循环
- ViewPager实现无限循环
- ViewPager无限循环
- ViewPager实现无限循环
- [Android]无限循环ViewPager
- 无限循环的Viewpager
- viewpager无限循环
- 实现无限循环ViewPager
- ViewPager 无限循环
- PHP Lumen - 入门教程 - 操作数据库
- sonar-scanner扫描代码出错 SonarQube svn: E170001
- VS2012 C#.NET 调用SAP WebService
- python总结
- leetcode41First Missing Positive & hihocoder1040矩形判断(C++)
- 安卓ViewPager无限循环
- Python基础学习Ⅱ
- JS:对数组常用的操作方法
- Table的思索(二):表头固定而内容滚动的表格
- SQL-用JOIN连接多个表
- memcpy、strcpy 和memmove
- 银行卡有效性验证
- 1. Two Sum(leetcode)
- Mysql、Oracle、SQL Server 2000的区别