改良的Android ViewPager小部件:InfiniteViewPager

jopen 8年前

InfiniteViewPager是一种改良的Android ViewPager小部件,允许无限的分页和自动滚动。

功能

  • 自动滑动到下一页
  • 平滑的滑到首页以及到尾页.
  • View重用,不用担心内存泄露
  • 支持指示器(对ViewpagerIncicator做了一定修改)
  • 调用ViewPager.setCurrentItem()不卡顿, 比常用的解决方案好

演示

Sample demo

使用

几乎跟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项目.

项目主页:http://www.open-open.com/lib/view/home/1444014741666