使用ViewPager实现自动无限循环的轮播
2015-10-27 16:55
816 查看
别人都说使用ViewPager轮播很简单,但还是需要自己手动来操作下。顺便总结下实现无限循环轮播的思路。
要使用ViewPager实现无限循环播放的轮播,会涉及到以下知识点:
1、ViewPager的使用
2、怎样实现无限循环?
3、怎样实现自动播放?
1、ViewPager的应用
ViewPager应用很简单,只需使用android.support.v4.view.ViewPager组件即可,同ListView一样,需要给它指定一个适配器。
四大函数略。
2、实现无限循环
当banner位于1屏,向左滑动,此时位于最后一屏,
当banner位于最后一屏,向右滑动,此时位于第一屏。
三、实现自动播放
完整代码:
要使用ViewPager实现无限循环播放的轮播,会涉及到以下知识点:
1、ViewPager的使用
2、怎样实现无限循环?
3、怎样实现自动播放?
1、ViewPager的应用
ViewPager应用很简单,只需使用android.support.v4.view.ViewPager组件即可,同ListView一样,需要给它指定一个适配器。
四大函数略。
2、实现无限循环
当banner位于1屏,向左滑动,此时位于最后一屏,
当banner位于最后一屏,向右滑动,此时位于第一屏。
[code]private class BannerAdapter extends PagerAdapter{ private LayoutInflater mInflater; public BannerAdapter(Context context){ mInflater = LayoutInflater.from(context); } @Override public int getCount() { return Max_Size; } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } @Override public Object instantiateItem(ViewGroup container, int position) { position %= Default_Size; View view = mInflater.inflate(R.layout.item, container,false); ImageView imageView = (ImageView) view.findViewById(R.id.image); imageView.setImageResource(mImageSrc[position]); container.addView(view); return view; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } @Override public void finishUpdate(ViewGroup container) { //获取当前banner的索引 int position = mBanner.getCurrentItem(); //屏幕0切换为屏幕3 if (position == 0){ currentPosition = Default_Size; //banner设置当前索引 mBanner.setCurrentItem(currentPosition, false); } //当下标达到99时,将其切换到第2屏 else if (position == Max_Size-1){ currentPosition = Default_Size-1; mBanner.setCurrentItem(currentPosition, false); } super.finishUpdate(container); } }
三、实现自动播放
[code]private Handler mHandler = new Handler(); private long lasttime; private Runnable mRunnable = new Runnable() { @Override public void run() { // TODO Auto-generated method stub if (System.currentTimeMillis() -lasttime>3000){ currentPosition++; viewHandler.sendEmptyMessage(currentPosition); lasttime = System.currentTimeMillis(); } mHandler.postDelayed(mRunnable, 3000); } };
完整代码:
[code]public class MainActivity extends Activity { private ViewPager mBanner; private ImageView[] mPositionViews; private BannerAdapter mAdapter; private int currentPosition = 0; private final int Max_Size = 100; private final int Default_Size =3; private int[] mImageSrc = { R.drawable.img1, R.drawable.img2, R.drawable.img3 }; private Handler mHandler = new Handler(); private long lasttime; private Runnable mRunnable = new Runnable() { @Override public void run() { // TODO Auto-generated method stub if (System.currentTimeMillis() -lasttime>3000){ currentPosition++; viewHandler.sendEmptyMessage(currentPosition); lasttime = System.currentTimeMillis(); } mHandler.postDelayed(mRunnable, 3000); } }; private Handler viewHandler = new Handler(){ public void handleMessage(android.os.Message msg) { mBanner.setCurrentItem(msg.what); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); init(); } private void setBannerPosition(int position){ position %= Default_Size; for (ImageView imageView:mPositionViews){ imageView.setImageResource(R.drawable.indicator_unchecked); } mPositionViews[position].setImageResource(R.drawable.indicator_checked); } private void init() { mPositionViews = new ImageView[]{ (ImageView) findViewById(R.id.position_1), (ImageView) findViewById(R.id.position_2), (ImageView) findViewById(R.id.position_3), }; mBanner = (ViewPager) findViewById(R.id.banner); mAdapter = new BannerAdapter(this); mBanner.setAdapter(mAdapter); mHandler.postDelayed(mRunnable, 3000); mBanner.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageSelected(int arg0) { currentPosition = arg0; setBannerPosition(currentPosition); } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageScrollStateChanged(int arg0) { } }); } private class BannerAdapter extends PagerAdapter{ private LayoutInflater mInflater; public BannerAdapter(Context context){ mInflater = LayoutInflater.from(context); } @Override public int getCount() { return Max_Size; } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } @Override public Object instantiateItem(ViewGroup container, int position) { position %= Default_Size; View view = mInflater.inflate(R.layout.item, container,false); ImageView imageView = (ImageView) view.findViewById(R.id.image); imageView.setImageResource(mImageSrc[position]); container.addView(view); return view; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } @Override public void finishUpdate(ViewGroup container) { //获取当前banner的索引 int position = mBanner.getCurrentItem(); //屏幕0切换为屏幕3 if (position == 0){ currentPosition = Default_Size; //banner设置当前索引 mBanner.setCurrentItem(currentPosition, false); } //当下标达到99时,将其切换到第2屏 else if (position == Max_Size-1){ currentPosition = Default_Size-1; mBanner.setCurrentItem(currentPosition, false); } super.finishUpdate(container); } } }
相关文章推荐
- UML学习笔记之活动图
- Leetcode -- Max Points on a Line
- input事件
- 011.Singleton 单例模式
- swift算法实践(2)
- 012.private protect public 访问控制符
- Android资源管理
- GCD 深入理解(二)
- java 线程中unchecked exception处理
- JNI编程中如何传递参数和返回值。
- iOS 国际化多语言设置 xcode7
- 关于web界面设计的整体可维护性的感悟
- Nginx做NodeJS应用负载均衡配置实例
- eclipse设置和优化
- 【视频处理】YUV格式说明
- 解决webview加载网页调用外部浏览器的办法
- Spring与MongoDB整合
- 013.package 访问控制符
- Java集合框架总结
- 美团Android自动化之旅—生成渠道包