改良的Android ViewPager小部件:InfiniteViewPager
jopen
9年前
InfiniteViewPager是一种改良的Android ViewPager小部件,允许无限的分页和自动滚动。
功能
- 自动滑动到下一页
- 平滑的滑到首页以及到尾页.
- View重用,不用担心内存泄露
- 支持指示器(对ViewpagerIncicator做了一定修改)
- 调用ViewPager.setCurrentItem()不卡顿, 比常用的解决方案好
演示
使用
几乎跟viewpager一样. 以下是步骤.
在xml布局中定义
<RelativeLayout android:layout_width="fill_parent" android:layout_height="200dp"> <com.zanlabs.widget.infiniteviewpager.InfiniteViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="fill_parent" android:visibility="visible" /> <com.zanlabs.widget.infiniteviewpager.indicator.LinePageIndicator android:id="@+id/indicator" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" app:fillColor="#e3ffc7" app:pageColor="#5fff65" /> </RelativeLayout>
继承InfinitePagerAdapter
跟继承BaseAdapter类似. 需要重写getView以及getItemCount(不是getCount)方法
@Override public View getView(int position, View view, ViewGroup container) { ViewHolder holder; if (view != null) { holder = (ViewHolder) view.getTag(); } else { view = mInflater.inflate(R.layout.item_infinite_viewpager, container, false); holder = new ViewHolder(view); view.setTag(holder); } PagerItem item = mList.get(position); holder.position = position; holder.name.setText(item.getName()); holder.description.setText(item.getDesc()+"position:"+position); Picasso.with(mContext).load(item.getImageUrl()).placeholder(R.mipmap.bg_loding_horizontal).into(holder.image); return view; } @Override public int getItemCount() { return mList==null?0:mList.size(); }
设置activity或者fragment.
@Override protected void onCreate(Bundle savedInstanceState) { // MockPagerAdapter pagerAdapter = new MockPagerAdapter(this); pagerAdapter.setDataList(MockDataGenerator.getViewPagerData()); mViewPager.setAdapter(pagerAdapter); mViewPager.setAutoScrollTime(5000); mViewPager.startAutoScroll(); mLineIndicator.setViewPager(mViewPager); // } @Override public void onStart() { super.onStart(); if (mViewPager != null) mViewPager.startAutoScroll(); } @Override public void onStop() { if (mViewPager != null) mViewPager.stopAutoScroll(); super.onStop(); }
更多可以参考sample项目.