ViewPager : Banner滚动
2014-05-30 00:00
836 查看
摘要: ViewPager是android兼容包中的类,本文通过一个例子学习ViewPager
直接上例子,关于VierPager的介绍请看android官方介绍:ViewPager官方文章。
如上图,本文实现的就是上面的效果,banner可手动滑动,自动滚动,左右无限循环。
废话少说,直接上代码,既然讲ViewPager,肯定是ViewPage实现的。
先上布局文件:
这个我就不解释了,布局文件一眼就能明白。
先实现手动滑动。
这里主要用到:PagerAdapter、OnPageChangeListener。PagerAdapter类似于ListView的适配器,OnPageChangeListener主要是获取ViewPager的滑动回调。
PagerAdapter 官方介绍:
Base class providing the adapter to populate pages inside of a
When you implement a PagerAdapter, you must override the following methods at minimum:
下面对这几个方法一一介绍:
至此,适配器的工作完成。
OnPageChangeListener状态的响应回调,ViewPager切换状态时调用。OnPageChangeListener接口总共三个回调方法:
onPageScrollStateChanged(int state)
onPageScrolled(int position, float positionOffset, int positionOffsetPixels)
onPageSelected(int position)
这里主要是实现onPageSelected,在此方法中设置指示器的状态切换。
现在手动滑动功能基本完成。
自动滚动的思路:
自动滚动是通过Handler实现的,当然也可以通过TimeTask或者ScheduledExecutorService等实现。废话少说,上代码:
现在开始第三个左右无限循环。
关于无限循环这件事,大概两个思路:
一个是设置适配器的getCount的数量为很大的一个数字然后根据position计算对应的View。
另一个是将getCount的数量设置为view的数量+2.
此处可参考(抱歉真的很懒):
http://blog.csdn.net/garry1024/article/details/11909337
http://blog.csdn.net/Just_Sanpark/article/details/17436037
具体实现我这里就不讲了,直接贴代码:源码
直接上例子,关于VierPager的介绍请看android官方介绍:ViewPager官方文章。
如上图,本文实现的就是上面的效果,banner可手动滑动,自动滚动,左右无限循环。
废话少说,直接上代码,既然讲ViewPager,肯定是ViewPage实现的。
先上布局文件:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <android.support.v4.view.ViewPager android:id="@+id/viewPage" android:layout_width="match_parent" android:layout_height="match_parent" /> <LinearLayout android:id="@+id/indicateLayout" android:layout_width="match_parent" android:layout_height="20dp" android:layout_alignParentBottom="true" android:layout_marginBottom="5dp" android:gravity="center" android:orientation="horizontal" > </LinearLayout> </RelativeLayout>
这个我就不解释了,布局文件一眼就能明白。
先实现手动滑动。
这里主要用到:PagerAdapter、OnPageChangeListener。PagerAdapter类似于ListView的适配器,OnPageChangeListener主要是获取ViewPager的滑动回调。
PagerAdapter 官方介绍:
Base class providing the adapter to populate pages inside of a
ViewPager. You will most likely want to use a more specific implementation of this, such as
FragmentPagerAdapteror
FragmentStatePagerAdapter.
When you implement a PagerAdapter, you must override the following methods at minimum:
Object instantiateItem(ViewGroup, int) void destroyItem(ViewGroup, int, Object) int getCount() boolean isViewFromObject(View, Object)
下面对这几个方法一一介绍:
public Object instantiateItem(View container, int position) { View banner = banners.get(position); //TODO 可以在此处设置View的一些属性 ((ViewPager) container).addView(banner); return banner; }
public int getCount() { //返回ViewPager中显示的view总数 return banners.size(); }
public boolean isViewFromObject (View view, Object object){ //判断是否由instantiateItem初始化返回的对象 return view==object; }
public void destroyItem(ViewGroup container, int position, Object object) { //复写的是destroyItem(ViewGroup container, int position, Object object) , //不是destroyItem (View container, int position, Object object),这个方法官方不建议复写 container.removeView((View) object); }
至此,适配器的工作完成。
OnPageChangeListener状态的响应回调,ViewPager切换状态时调用。OnPageChangeListener接口总共三个回调方法:
onPageScrollStateChanged(int state)
onPageScrolled(int position, float positionOffset, int positionOffsetPixels)
onPageSelected(int position)
这里主要是实现onPageSelected,在此方法中设置指示器的状态切换。
public void onPageSelected(int position) { dots.get(oldPosition).setBackgroundResource(R.drawable.dot_normal); dots.get(position).setBackgroundResource(R.drawable.dot_focused); ldPosition = position; }
现在手动滑动功能基本完成。
自动滚动的思路:
自动滚动是通过Handler实现的,当然也可以通过TimeTask或者ScheduledExecutorService等实现。废话少说,上代码:
private void sendScrollMessage(long delayTimeInMills) { /** remove messages before, keeps one message is running at most **/ mHandler.removeMessages(SCROLL_WHAT); mHandler.sendEmptyMessageDelayed(SCROLL_WHAT, delayTimeInMills); }
class PollingHandler extends Handler { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case SCROLL_WHAT: scroll(); sendScrollMessage(mInterval); default: break; } } }
private void scroll() { PagerAdapter adapter = mViewPager.getAdapter(); int currentItem = mViewPager.getCurrentItem(); int totalCount; if (adapter == null || (totalCount = adapter.getCount()) <= 1) { return; } if (currentItem == totalCount - 1) { mViewPager.setCurrentItem(0, mIsBorderAnimation); } else { mViewPager.setCurrentItem(++currentItem, true); } }
现在开始第三个左右无限循环。
关于无限循环这件事,大概两个思路:
一个是设置适配器的getCount的数量为很大的一个数字然后根据position计算对应的View。
另一个是将getCount的数量设置为view的数量+2.
此处可参考(抱歉真的很懒):
http://blog.csdn.net/garry1024/article/details/11909337
http://blog.csdn.net/Just_Sanpark/article/details/17436037
具体实现我这里就不讲了,直接贴代码:源码
相关文章推荐
- viewpager循环滚动和自动轮播的问题
- ViewPager实现图片循环滚动
- Android 深入ViewPager补间动画,实现类京东商城首页广告Banner切换效果
- Android 深入ViewPager补间动画,实现类京东商城首页广告Banner切换效果
- Android不继承ViewPager实现自动滚动翻页功能
- Android 实现横向标题栏滚动效果(HorizontalScrollView + GridView + Viewpager + 自定义适配器)
- viewpager翻页效果加标签点滚动效果
- ViewPager打造轮播图Banner/引导页Guide
- Viewpager水平循环滚动的一种实现
- viewpager循环滚动和自动轮播的问题
- 自动滚动的ViewPager
- banner广告及view pager 的小圆点指示器
- Android 中ViewPager 实现banner无限轮播效果
- 自己定义ViewpagerIndicator (仿猫眼,加入边缘回弹滚动效果)
- TabLayout+Viewpager+Fragment实现分页滚动
- Android实现ViewPager无限循环滚动回绕
- Android 深入ViewPager补间动画,实现类京东商城首页广告Banner切换效果
- Android 深入ViewPager补间动画,实现类京东商城首页广告Banner切换效果
- 屏蔽ViewPager的左右滑动和切换时的滚动动画
- android简单实现无限滚动,自动滚动的ViewPager