改良的Android ViewPager小部件:InfiniteViewPager

jopen 9年前發布 | 24K 次閱讀 Android開發 移動開發 InfiniteViewPager

InfiniteViewPager是一種改良的Android ViewPager小部件,允許無限的分頁和自動滾動。

功能

  • 自動滑動到下一頁
  • 平滑的滑到首頁以及到尾頁.
  • View重用,不用擔心內存泄露
  • 支持指示器(對ViewpagerIncicator做了一定修改)
  • 調用ViewPager.setCurrentItem()不卡頓, 比常用的解決方案好
  • </ul>

    演示

    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.baiduhome.net/lib/view/home/1444014741666

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!