[android实现轮播图无限循环]Android实现轮播图无限循环效果

更新时间:2021-06-17    来源:.Net开发    手机版     字体:

【www.bbyears.com--.Net开发】

实现无限循环

在getCount()方法中,返回一个很大的值,Integer.MAX_VALUE

在instantiateItem()方法中,获取当前View的索引时,进行取于操作,传递进来的int position是个非常大的数,对他进行求余数

在destroyItem()方法中,同样

在onPageSelected()监听方法中,对传递进来的索引进行取于 

反向的无限循环

调用ViewPager对象的setCurrentItem()方法,设置第一次进来时候的当前页,参数:int数字,我们把它定位到Integer.MAX_VALUE的中间,并且保证第一条是当前位置,Integer.MAX_VALUE/2-((Integer.MAX_VALUE/2)%banners.size()) 

目前有个左划空白页的问题没解决

 代码如下

packagecom.tsh.myviewpager;

 

importjava.util.ArrayList;

importjava.util.List;

 

importandroid.app.Activity;

importandroid.os.Bundle;

importandroid.support.v4.view.PagerAdapter;

importandroid.support.v4.view.ViewPager;

importandroid.support.v4.view.ViewPager.OnPageChangeListener;

importandroid.view.View;

importandroid.view.ViewGroup;

importandroid.widget.ImageView;

importandroid.widget.LinearLayout;

importandroid.widget.TextView;

 

publicclassMainActivityextendsActivity {

  privateViewPager vp_banner;

  privateLinearLayout ll_points;

  privateTextView tv_title;

  privateListbanners;

  privateString[] titles=newString[]{

      "新闻标题1",

      "新闻标题2",

      "新闻标题3"

  };

  privateListpoints=newArrayList();

  @Override

  protectedvoidonCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    // 初始化

    vp_banner = (ViewPager) findViewById(R.id.vp_banner);

    ll_points = (LinearLayout) findViewById(R.id.ll_points);

    tv_title = (TextView) findViewById(R.id.tv_title);

     

    // banner部分

    banners =newArrayList<>();

    ImageView img1 =newImageView(this);

    img1.setImageResource(R.drawable.a);

    banners.add(img1);

    ImageView img2 =newImageView(this);

    img2.setImageResource(R.drawable.b);

    banners.add(img2);

    ImageView img3 =newImageView(this);

    img3.setImageResource(R.drawable.c);

    banners.add(img3);

     

    //小图标

    ll_points=(LinearLayout) findViewById(R.id.ll_points);

    for(inti=0;i

      ImageView image=newImageView(this);

      image.setImageResource(R.drawable.point_selector);

      LinearLayout.LayoutParams params=newLinearLayout.LayoutParams(5,5);

      params.rightMargin=4;

      image.setLayoutParams(params);

       

      if(i==0){

        image.setEnabled(true);

      }else{

        image.setEnabled(false);

      }

      points.add(image);

      ll_points.addView(image);

    }

     

    // 设置适配器

    vp_banner.setAdapter(newMyPagerAdapter());

    vp_banner.setCurrentItem(Integer.MAX_VALUE/2-((Integer.MAX_VALUE/2)%banners.size()));

    vp_banner.setOnPageChangeListener(newOnPageChangeListener() {

      @Override

      publicvoidonPageSelected(intarg0) {

        tv_title.setText(titles[arg0%banners.size()]);

        //小图标处理

        for(ImageView point:points){

          point.setEnabled(false);

        }

        points.get(arg0%banners.size()).setEnabled(true);

      }

       

      @Override

      publicvoidonPageScrolled(intarg0,floatarg1,intarg2) {

        // TODO Auto-generated method stub

         

      }

       

      @Override

      publicvoidonPageScrollStateChanged(intarg0) {

        // TODO Auto-generated method stub

         

      }

    });

     

  }

 

  privateclassMyPagerAdapterextendsPagerAdapter {

    @Override

    publicvoiddestroyItem(ViewGroup container,intposition, Object object) {

      System.out.println("销毁:"+position);

      container.removeView((View)object);

      object=null;

    }

 

    @Override

    publicObject instantiateItem(ViewGroup container,intposition) {

      System.out.println("初始化:"+position);

      position=position%banners.size();

       

      //解决右划出错

      if(banners.get(position).getParent()!=null){

        //container.removeView(banners.get(position));

      }else{

        container.addView(banners.get(position));

      }

       

      returnbanners.get(position);

    }

 

    @Override

    publicintgetCount() {

      returnInteger.MAX_VALUE;

    }

 

    @Override

    publicbooleanisViewFromObject(View arg0, Object arg1) {

      returnarg0 == arg1;

    }

  }

}

本文来源:http://www.bbyears.com/asp/124333.html

热门标签

更多>>

本类排行