ViewPager 的循环滚动

ViewPager 的循环滚动

实现原理:滑动到最后一张的时候,再滑动会到第一次的位置

有两种实现方式:

1. 将count 设置为无限大,当前位置设置成Integer.MAXVALUE/2-Integer.MAXVALUE/2%size,使他左右都能滚动

2.不断循环,用handler发送消息,让他切换(pager.setCurrentItem(int pos,false);)可以去除调转到第一张的动画效果

效果图如下:



代码:

package com.lei.vpdemo;


import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.widget.TextView;


import com.lei.vpdemo.frg.ImageFrg;


public class MainActivity extends FragmentActivity implements
OnPageChangeListener {
private ViewPager mPager;
private TextView mShowTv;
private int[] data;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);


setContentView(R.layout.activity_main);
initView();


MyPagerAdapter adapter = new MyPagerAdapter(getSupportFragmentManager());
mPager.setAdapter(adapter);
int n = Integer.MAX_VALUE / 2 % data.length;// 2147483647 / 2 = 1073741823
int itemPosition = Integer.MAX_VALUE / 2 - n;
mPager.setCurrentItem(itemPosition);// 选择第一张处于无限大的位置,以便能作滑



}


private void initView() {
mPager = (ViewPager) findViewById(R.id.viewpager);
mShowTv = (TextView) findViewById(R.id.show_tv);


data = new int[] { R.drawable.earth, R.drawable.sky1, R.drawable.sky2,
R.drawable.sky3, R.drawable.sky4 };
mPager.setOnPageChangeListener(this);
}


// 触动滑动事件
public void onPageScrollStateChanged(int arg0) {


}


// 滑动: arg0:当前滑动位置position arg1:滑动偏移量
public void onPageScrolled(int arg0, float arg1, int arg2) {


}


// 滑动停止,选中位置position
public void onPageSelected(int arg0) {
mShowTv.setText(String.valueOf(arg0 % data.length));


}


class MyPagerAdapter extends FragmentPagerAdapter {


public MyPagerAdapter(FragmentManager fm) {
super(fm);
}


@Override
public Fragment getItem(int arg0) {
int count = data.length;


return ImageFrg.newInstance(data[arg0 % count]);// 滑动到最后一张,再滑动又加载的第一张图片
}


@Override
public int getCount() {
return Integer.MAX_VALUE;// 将他的子view设置到无限大,以此实现无限循环
}
}
}





你可能感兴趣的:(viewpager)