服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Android - Android 使用 ViewPager循环广告位的实现

Android 使用 ViewPager循环广告位的实现

2021-04-15 15:38John.w Android

本文给大家分享android使用 ViewPager循环广告位的实现,感兴趣的朋友一起学习吧

如何实现循环播放

现在网上实现循环播放都是在adapter的getCount()方法返回一个较大的值并且instantiateItem(ViewGroup container, int position)中通过取余(position/datas.size())的方式,让ViewPager不断的播放下去。

这里我们通过修改数据源和设置currentItem的方式实现。

修改数据源:

?
1
2
3
4
5
6
7
8
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对象中进行:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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类如下:

?
1
2
3
4
5
6
7
8
9
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之后就可以启动自动循环:

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

这里我们是用了弱引用,主要是为了防止出现内存溢出。

注意:

 在设置CurrentItem时一定要在OnPageChangeListener中进行,Adapter的finishUpdate(View view)中设置会出现白屏的情况。如果哪位大神知道,麻烦指教下。

延伸 · 阅读

精彩推荐