Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 使用 ViewPager循環廣告位的實現

Android 使用 ViewPager循環廣告位的實現

編輯:關於Android編程

如何實現循環播放

現在網上實現循環播放都是在adapter的getCount()方法返回一個較大的值並且instantiateItem(ViewGroup container, int position)中通過取余(position/datas.size())的方式,讓ViewPager不斷的播放下去。

這裡我們通過修改數據源和設置currentItem的方式實現。

修改數據源:

final List<Integer> datas = new ArrayList<>();
//這裡添加測試數據,實際項目中可以是從網絡獲取數據
    datas.add(R.mipmap.welcome_page_01);
    datas.add(R.mipmap.welcome_page_02);
    datas.add(R.mipmap.welcome_page_03);
    //處理數據源
    datas.add(0,datas.get(datas.size()-1));
    datas.add(datas.get(1));

設置currentItem需要在OnPageChangeListener對象中進行:

mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
      @Override
      public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
      }
      @Override
      public void onPageSelected(int position) {
        if(position==0){
          mViewPager.setCurrentItem(datas.size()-2,false);
        }else if(position==datas.size()-1){
          mViewPager.setCurrentItem(1,false);
        }
      }
      @Override
      public void onPageScrollStateChanged(int state) {
      }
    });

 Adapter和一般的ViewPager的Adapter一樣即可。

如何實現自動循環:

實現自動循環,方法比較多,比如Timer,Handler,Alarm等等。這裡我們使用Handle的方式

自定義Handler類如下:

  public class BannerHander extends Handler{
    @Override
    public void handleMessage(Message msg) {
      if(msg.what==1){
        mViewPager.setCurrentItem(mViewPager.getCurrentItem()+1);
        sendEmptyMessageDelayed(1,3000);
      }
    }
  }

獲取數據,給ViewPager設置Adapter之後就可以啟動自動循環:

if(!(mHandler!=null && mHandler.get()!=null)){
  mHandler = new WeakReference<BannerHander>(new BannerHander());
}
mHandler.get().sendEmptyMessageDelayed(1, 300);

這裡我們是用了弱引用,主要是為了防止出現內存溢出。

注意:

 在設置CurrentItem時一定要在OnPageChangeListener中進行,Adapter的finishUpdate(View view)中設置會出現白屏的情況。如果哪位大神知道,麻煩指教下。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved