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設置到無限大,以此實現無限循環
}
}
}





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章