關於ViewPager的使用http://blog.csdn.net/lw_zhaoritian/article/details/52431639
下面實現ViewPager的循環效果,默認的的ViewPager是不帶循環的。所以需要自己寫。參考網上例子,實現思路如下。
- 首尾添加重複的Fragment
- 監聽pager變化事件,當變化到新加的Fragment時候進行跳轉
- 跳轉後正常變化,既從最後到最前或最前到最後。
開始改寫上次的例子:
添加Fragment
//添加最後一個到首部
MyFragment fg0 = new MyFragment();
Bundle args0 = new Bundle();
args0.putString("text", "第3個Fragment");
fg0.setArguments(args0);
fragments.add(fg0);
MyFragment fg1 = new MyFragment();
Bundle args1 = new Bundle();
args1.putString("text", "第1個Fragment");
fg1.setArguments(args1);
fragments.add(fg1);
MyFragment fg2 = new MyFragment();
Bundle args2 = new Bundle();
args2.putString("text", "第2個Fragment");
fg2.setArguments(args2);
fragments.add(fg2);
MyFragment fg3 = new MyFragment();
Bundle args3 = new Bundle();
args3.putString("text", "第3個Fragment");
fg3.setArguments(args3);
fragments.add(fg3);
//添加第一個到尾部
MyFragment fg4 = new MyFragment();
Bundle args4 = new Bundle();
args4.putString("text", "第1個Fragment");
fg4.setArguments(args4);
fragments.add(fg4);
設置監聽事件
設置之前先定義幾個變量:
//是否改變
private boolean mIsChanged = false;
//設置當前pager位置變量
private int mCurrentPagePosition = FIRST_ITEM_INDEX;
private static final int POINT_LENGTH = 3;
private static final int FIRST_ITEM_INDEX = 1;
監聽事件:
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
Toast.makeText(MainActivity.this,position+"",Toast.LENGTH_SHORT).show();
mIsChanged = true;
if (position > POINT_LENGTH) {// 末位之後,跳轉到首位(1)
mCurrentPagePosition = FIRST_ITEM_INDEX;
} else if (position < FIRST_ITEM_INDEX) {// 首位之前,跳轉到末尾(N)
mCurrentPagePosition = POINT_LENGTH;
} else {
mCurrentPagePosition = position;
}
}
@Override
public void onPageScrollStateChanged(int state) {
if (ViewPager.SCROLL_STATE_IDLE == state) {
if (mIsChanged) {
mIsChanged = false;
viewPager.setCurrentItem(mCurrentPagePosition, false);
}
}
}
});
全部代碼:
public class MainActivity extends AppCompatActivity {
private List<Fragment> fragments;
private ViewPager viewPager;
private List<String> titleList;
private boolean mIsChanged = false;
private int mCurrentPagePosition = FIRST_ITEM_INDEX;
private static final int POINT_LENGTH = 3;
private static final int FIRST_ITEM_INDEX = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
viewPager = (ViewPager) findViewById(R.id.viewpager);
titleList = new ArrayList<String>();
titleList.add("影音視頻");
titleList.add("最新推薦");
titleList.add("遊戲娛樂");
titleList.add("影音視頻");
titleList.add("最新推薦");
fragments = new ArrayList<Fragment>();
//添加最後一個到首部
MyFragment fg0 = new MyFragment();
Bundle args0 = new Bundle();
args0.putString("text", "第3個Fragment");
fg0.setArguments(args0);
fragments.add(fg0);
MyFragment fg1 = new MyFragment();
Bundle args1 = new Bundle();
args1.putString("text", "第1個Fragment");
fg1.setArguments(args1);
fragments.add(fg1);
MyFragment fg2 = new MyFragment();
Bundle args2 = new Bundle();
args2.putString("text", "第2個Fragment");
fg2.setArguments(args2);
fragments.add(fg2);
MyFragment fg3 = new MyFragment();
Bundle args3 = new Bundle();
args3.putString("text", "第3個Fragment");
fg3.setArguments(args3);
fragments.add(fg3);
//添加第一個到尾部
MyFragment fg4 = new MyFragment();
Bundle args4 = new Bundle();
args4.putString("text", "第1個Fragment");
fg4.setArguments(args4);
fragments.add(fg4);
FragmentPagerAdapter adapter = new FragmentPagerAdapter(
getSupportFragmentManager()) {
@Override
public int getCount() {
return 5;
}
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
@Override
public CharSequence getPageTitle(int position) {
return titleList.get(position);
}
};
viewPager.setAdapter(adapter);
//默認打開第幾個
viewPager.setCurrentItem(2, false);
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
Toast.makeText(MainActivity.this,position+"",Toast.LENGTH_SHORT).show();
mIsChanged = true;
if (position > POINT_LENGTH) {// 末位之後,跳轉到首位(1)
mCurrentPagePosition = FIRST_ITEM_INDEX;
} else if (position < FIRST_ITEM_INDEX) {// 首位之前,跳轉到末尾(N)
mCurrentPagePosition = POINT_LENGTH;
} else {
mCurrentPagePosition = position;
}
}
@Override
public void onPageScrollStateChanged(int state) {
if (ViewPager.SCROLL_STATE_IDLE == state) {
if (mIsChanged) {
mIsChanged = false;
//改變位置
viewPager.setCurrentItem(mCurrentPagePosition, false);
}
}
}
});
}
}