其实所谓的无限循环滑动是伪无限循环,它只是把页面数设置的比较大而已,从而不可能滑动到末尾java代码分为两部分一部分分为主界面第二比分分为adapter下面分别给出两部分源码,主要思想就是把页面数设置为很大的数,把页面放置在中间,保证左右都有无限个页面,
效果如下
public class MainActivity extends Activity {
private ViewPager mViewPager;
private List<View> views;
//管理圆点的
private List<ImageView> dots;
private LayoutInflater mInflater;
private LinearLayout mLinearLayout;
//PagerTabStrip
private PagerTabStrip mPagerTab;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dots = new ArrayList<>();
//设置表头
mPagerTab= (PagerTabStrip) findViewById(R.id.pagertab);
//设置背景颜色,这里有很多种颜色设置方法,
mPagerTab.setBackgroundColor(Color.argb(99,141,238,238));
//设置当前页下面滚动条的颜色
mPagerTab.setTabIndicatorColor(Color.BLUE);
//设置文字颜色
mPagerTab.setTextColor(Color.BLACK);
//设置下面一天横线颜色和滚动条同色
mPagerTab.setDrawFullUnderline(true);
//代码中设置位于底部(也可在XML当中实现,这里已经在XML当中实现)
//mPagerTab.setGravity(Gravity.BOTTOM);
mLinearLayout= (LinearLayout) findViewById(R.id.linerlayout);
for (int i = 0; i < 4; i++) {
ImageView iv = new ImageView(this);
iv.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
iv.setImageResource(R.mipmap.point_normal);
//设置点左右上下距离
iv.setPadding(20,20,20,20);
dots.add(iv);
mLinearLayout.addView(iv);
}
//因为开始页面不响应页面滑动,所以先把开始页面设置为选中背景setBackgroundResource不可以
dots.get(0).setImageResource(R.mipmap.point_select);
mViewPager = (ViewPager) findViewById(R.id.viewpager);
views = new ArrayList<>();
mInflater = getLayoutInflater();
View view1 = mInflater.inflate(R.layout.viewpager_item1, null);
View view2 = mInflater.inflate(R.layout.viewpager_item2, null);
View view3 = mInflater.inflate(R.layout.viewpager_item3, null);
View view4 = mInflater.inflate(R.layout.viewpager_item1, null);
views.add(view1);
views.add(view2);
views.add(view3);
views.add(view4);
MyAdapter myAdapter = new MyAdapter(views);
mViewPager.setAdapter(myAdapter);
//addOnPageChangeListener替换掉setOnPageChangeListener
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
//当前页面
@Override
public void onPageSelected(int position) {
for (ImageView iv1 : dots) {
iv1.setImageResource(R.mipmap.point_normal);
}
dots.get(position%views.size()).setImageResource(R.mipmap.point_select);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
//移到中间,并且让第一张图位于第一个,这样左侧也有很多view所以也可往左循环滑动
mViewPager.setCurrentItem(Integer.MAX_VALUE/2-Integer.MAX_VALUE/2%views.size());
}
}
public class MyAdapter extends PagerAdapter {
private List<View>views;
private String[]titles={"标题1","标题2","标题3","标题4"};
public MyAdapter(List<View> views) {
this.views = views;
}
@Override
public int getCount() {
//实现循环 ,页面数设为最大值保证滑动不到最后
return Integer.MAX_VALUE;
}
@Override
public CharSequence getPageTitle(int position) {
//给每个页面设置标题
return titles[ position%views.size()];
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
//实现循环
View view=views.get(position%views.size());
if(view.getParent()!=null){
container.removeView(view);
}
container.addView(view);
return view;
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0==arg1;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
//实现循环
// container.removeView(views.get(position%views.size()));
}
}
下面为布局部分文件源码
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<!-- PagerTitleStrip must be a direct child of a ViewPager-->
<android.support.v4.view.PagerTabStrip
android:id="@+id/pagertab"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"/>
</android.support.v4.view.ViewPager>
<LinearLayout
android:id="@+id/linerlayout"
android:layout_width="match_parent"
android:layout_height="50dip"
android:layout_gravity="bottom"
android:gravity="center"
android:orientation="horizontal">
</LinearLayout>
</FrameLayout>
</RelativeLayout>
这里要注意PagerTabStrip的位置,必须放在ViewPager里面,否则会报下面的错误
Exception raised during rendering: PagerTitleStrip must be a direct child of a ViewPager.