首页 > 系统 > Android > 正文

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

2019-10-24 20:33:20
字体:
来源:转载
供稿:网友

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

如何实现循环播放

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

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

修改数据源:

 

 
  1. final List<Integer> datas = new ArrayList<>(); 
  2. //这里添加测试数据,实际项目中可以是从网络获取数据 
  3. datas.add(R.mipmap.welcome_page_01); 
  4. datas.add(R.mipmap.welcome_page_02); 
  5. datas.add(R.mipmap.welcome_page_03); 
  6. //处理数据源 
  7. datas.add(0,datas.get(datas.size()-1)); 
  8. datas.add(datas.get(1)); 

设置currentItem需要在OnPageChangeListener对象中进行:

 

 
  1. mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
  2. @Override 
  3. public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
  4. @Override 
  5. public void onPageSelected(int position) { 
  6. if(position==0){ 
  7. mViewPager.setCurrentItem(datas.size()-2,false); 
  8. }else if(position==datas.size()-1){ 
  9. mViewPager.setCurrentItem(1,false); 
  10. @Override 
  11. public void onPageScrollStateChanged(int state) { 
  12. }); 

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

如何实现自动循环:

实现自动循环,方法比较多,比如Timer,Handler,Alarm等等。这里我们使用Handle的方式

自定义Handler类如下:

 

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

获取数据,给ViewPager设置Adapter之后就可以启动自动循环:

 

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

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

注意:

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


注:相关教程知识阅读请移步到Android开发频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表